![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Файл, состоящий из картинок! [D5, WinME]
M@XIDROM © (2002-01-21 01:53:00)Ребята, нужет типизированный файл, состоящий из компонентов типа TJPEGImage. Как это сделать?
pasha_golub (2002-01-31 14:31:00) [1]К стати на глаза только, что попался компонент для создания .cab файлов. Так вот идея: берешь этот компонент и сним работаешь, да к тому же еще и время экономишь. Наверное для хранения классно будет, а во время работы в TImageList их все скидывай!
Vitaly Nevzorov (2002-01-23 22:31:00) [2]Можно конечно и типизированный файл, только размер записи надо сделать максимально возможный и хранить в другом поле истинный размер:
Type TMyPicture=record
Name:String[255];
Length:integer;
picture:array[0..100000] of Byte;
end;
Но такой способ конечно доставит много хлопот, во-первых сложно заполнять массив, во вторых много места занимает на диске.
Легче всего хранить в какой-нибудь базе данных, там уже все есть для хранения, чтения, записи и поиска.
По поводу записи через потоки - можно, конечно, но прийдется так же хранить индексы - где какой файл храниться (с какой позиции и его длину).
Впрочем можно еще назначить файл типа file of Byte и записи отделять одну от другой какой-нибудь стандартной последовательностью байт (16 уникальных байт должно хватить)
Кроме того файлы можно писать в ресурс, архив и т.п.
Все вопросы пожалуйста по email
MBo (2002-01-23 08:43:00) [3]если количество файлов меняется, пиши/читай в начале еще их количество и цикл делай
procedure TForm1.Button2Click(Sender: TObject);
var
j1,j2:tjpegimage;
fs: TFileStream;
ms: TMemoryStream;
size: Integer;
begin
j1:= TJpegImage.Create;
j2:= TJpegImage.Create;
ms:= TMemoryStream.Create;
fs:= TFileStream.Create("e:\jpgs.dat",fmOpenRead);
fs.ReadBuffer( size, sizeof(integer));
ms.CopyFrom(fs, size );
ms.position := 0;
j1.LoadfromStream(ms);
image1.picture.assign(j1);
ms.clear;
fs.ReadBuffer( size, sizeof(integer));
ms.CopyFrom(fs, size );
ms.position := 0;
j2.LoadfromStream(ms);
image2.picture.assign(j2);
ms.free;
fs.free;
j1.free;
j2.Free;
end;
MJH (2002-01-23 03:59:00) [4]2Фэ:
...где девки визжат...
Фэ (2002-01-22 23:37:00) [5]Ясный пень, а заодно и ключи от квартиры..
M@XIDROM (2002-01-22 23:09:00) [6]МВо, спасибо большое за ответ! Но самая главная проблема в том, что мне теперь не считать правильно поток из файла! Если не трудно, напиши пожалуйста вариант для считывания из файла!
MBo (2002-01-21 13:21:00) [7]подгони под себя, чтение аналогично
procedure TForm1.Button1Click(Sender: TObject);
var
j1,j2:tjpegimage;
fs: TFileStream;
ms: TMemoryStream;
size: Integer;
begin
j1:= TJpegImage.Create;
j2:= TJpegImage.Create;
j1.LoadFromFile("e:\5.jpg");
j2.LoadFromFile("e:\4.jpg");
ms:= TMemoryStream.Create;
fs:= TFileStream.Create("e:\jpgs.dat",fmCreate);
j1.SaveToStream(ms);
ms.position := 0;
size := ms.Size;
fs.WriteBuffer( size, Sizeof(size));
fs.CopyFrom(ms, size );
ms.Clear;
j2.SaveToStream(ms);
ms.position := 0;
size := ms.Size;
fs.WriteBuffer( size, Sizeof(size));
fs.CopyFrom(ms, size );
ms.free;
fs.free;
j1.free;
j2.Free;
end;
M@XIDROM (2002-01-21 11:21:00) [8]А как воспользоваться этими потоками при записи набора картинок в файл????????????????
MBo (2002-01-21 10:05:00) [9]так тебе надо писать компоненты или все-таки только картинки?
а типизированный файл удобен, когда есть записи постоянной длины, иначе лучше пользоваться потоками, записывая сначала длину
структуры, а потом саму структуру.
MJH (2002-01-21 05:29:00) [10]файл из компонентов? хм...а что - прикольно