Форум: "Система";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.10;
Скачать: [xml.tar.bz2];




Вниз

Как записать несколько картинок в один .dat файл 


VS   (2001-09-27 07:12) [0]

Как можно записать несколько картинок в один файл структуры .dat
и потом читать эти картинки (например для использования фонов в
своей программе, что-бы не хранить их в .exe)



Digitman   (2001-09-27 09:01) [1]

например, так :
FileStream := TFileStream.Create("mybitmaps.dat", fmCreate);
try
Bitmap1.SaveToStream(FileStream);
Bitmap2.SaveToStream(FileStream);
// и т.д.
finally
FileStream.Free;
end;



VS   (2001-09-28 08:48) [2]

А как читать из этого файла. Например, нужно открыть одну
картинку из этого файла с номером таким то и поместить как фон
рабочего стола



Digitman   (2001-09-28 12:50) [3]

запись в поток индексированного списка битмапов

var
FileStream: TFileStream;
bmplist: TComponentList; //список битмапов, записываемых в поток
bmplistcount: Integer; //число битмапов в списке
offslist: TList; //список смещений битмапов в потоке
i: Integer;

.....
готовим здесь объекты-битмапы,
создаем экземпляр bmplist
и ссылки на экземпляры битмапов записываем в bmplist в нужном порядке следования
......

bmplistcount := bmplist.Count; // общее число битмапов, подлежащих сохранению

FileStream := TFileStream.Create("mybitmaps.dat", fmCreate);
offslist := TList.Create;

try

//резерв места в потоке под заголовок
FileStream.Size := SizeOf(bmplistcount) + SizeOf(Integer)*bmplistcount;
FileStream.Position := FileStream.Size; // в конец заголовка
//емкость списка смещений
offslist.Capacity := bmplistcount;

for i:= 0 to bmplistcount - 1 do
//сохранение смещения битмапа в потоке в список смещений
offslist.Items[i] := Pointer(FileStream.Position);
//сохранение в поток i-го битмапа
TBitmap(bmplist.Items[i]).SaveToStream(FileStream);

with FileStream do begin
Position := 0;
Write(bmplistcount, SizeOf(bmplistcount)); //сохранение числа битмапов
Write(offslist.List^, SizeOf(Integer)*bmplistcount); //сохранение списка смещений
end;
finally
offslist.Free;
FileStream.Free;
end;
....


чтение из потока битмапа по его порядковому номеру в списке сохраненных

function GetBitmapFromFile(const FileName: String; const bmpidx: Integer): TBitmap;
var
FileStream: TFileStream;
i: Integer;
begin
Result := TBitmap.Create;
try
FileStream := TFileStream.Create("mybitmaps.dat", fmOpenRead);
try
FileStream.Read(i, SizeOf(i));//общ.число битмапов в потоке
if bmpidx < i then begin
FileStream.Position := (i+1)*SizeOf(Integer);
FileStream.Read(i, SizeOf(i));//смещение нужного битмапа в потоке
FileStream.Position := i;
Result.LoadFromStream(FileStream);
end else
raise Exception.Create("BmpIndex out of bound");
finally
FileStream.Free;
end;
except
Result.Free;
raise;
end;
end;

примерно так. до ума доводи сам.




Форум: "Система";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.10;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.014 c
6-28513           dimen                 2001-10-15 02:19  2002.01.10  
исходник копмпоненты http или как организовать его...


4-28554           Игорь2                2001-11-08 23:47  2002.01.10  
кодировка


3-28439           Denis Proshkin        2001-12-08 10:32  2002.01.10  
Удаление повторяющихся данных


1-28456           Serg5                 2001-12-21 19:36  2002.01.10  
Знатоки, подскажите. плиз, как запретить ввод любых значений в StringGrid, кроме первой колонки. Т.е. остальные попросту у меня предназначенны для отображения результата.


1-28458           Aleksandr             2001-12-21 14:33  2002.01.10  
Как корректно уничтожить из дестрактора компоненты ScrollBar