Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.07.17;
Скачать: CL | DM;

Вниз

Как лучше записать несколько TBitmap в один файл   Найти похожие ветки 

 
Baks   (2011-04-01 16:53) [0]

Подскажите, как лучше записать несколько TBitmap в один файл. У них разные размеры. А ещё, в этот же файл нужно записать названия этих картинок (String).


 
clickmaker ©   (2011-04-01 16:54) [1]

SaveToStream


 
w   (2011-04-01 16:57) [2]

tstream

друг за дружкой.

заголовок в котором размер битмапа и строки, пишем битмап, строку. Опять заголовок и тд


 
Kerk ©   (2011-04-01 16:58) [3]

В zip положи, чего велосипед изобретать :)


 
Baks   (2011-04-01 17:11) [4]

Правильно я понял, что лучше подойдёт TFileStream? Здесь пока без заголовков.


procedure Button1Click(Sender: TObject);
const
 FName = "MyFile.dat";

var
 Bmp: TBitmap;
 FStream: TFileStream;
begin
 Bmp := TBitmap.Create;
 try
   Bmp.Assign(Image1.Picture.Bitmap);
   FStream := TFileStream.Create(ExtractFilePath(Application.ExeName) + FName, fmOpenWrite);
   try
    // FStream.Seek(0, soFromEnd);

     Bmp.SaveToStream(FStream);
   finally
     FStream.Free;
   end;
 finally
   Bmp.Free;
 end;
end;


А как правильно узнать нужный размер для каждого TBitmap (Для заголовков)?


> В zip положи

А как? Для этого ведь спец. компоненты нужны? У меня D5.


 
w   (2011-04-01 17:24) [5]

еще один стрим ИТОГОВЫЙ в котрый ты будешь писать из первого.  FStream TMemoryStream.


> А как? Для этого ведь спец. компоненты нужны? У меня D5.


не нужны. ищи код в гугле


 
clickmaker ©   (2011-04-01 17:35) [6]

> как правильно узнать нужный размер для каждого TBitmap (Для
> заголовков)?

можно не размер писать, а смещение для каждого (Stream.Position) в общий заголовок.


 
Baks   (2011-04-01 18:00) [7]

Я вот тут ещё ZipTV скачал: http://www.ziptv.com/productinfo.htm


> смещение для каждого (Stream.Position) в общий заголовок.


Так наверно лучше. Заголовок с позициями, которые получены во время записи.


 
w   (2011-04-01 18:06) [8]


> Так наверно лучше. Заголовок с позициями, которые получены
> во время записи.

я бы сделал так. подсчитал общее колво записей, создал общий заголовок, записал, и для каждой записи свой заголовок. Так проще имхо


 
Baks   (2011-04-01 18:18) [9]


> w   (01.04.11 18:06) [8]


Ну да. Сначала все заголовки.


> Я вот тут ещё ZipTV скачал.


Ёёёё, так он платный оказывается.


 
Германн ©   (2011-04-01 18:25) [10]


> Ёёёё, так он платный оказывается.
>

http://rouse.drkb.ru/files/fwzip.zip - этот бесплатный.


 
Rouse_ ©   (2011-04-01 19:25) [11]

Вариантов на самом деле много, от самостоятельного формирования заголовка и записи всех данных в плоский стрим, до использования сторонних движкох реализующих данный метод (ака SimpleDBase :), можно посмотреть так-же в сторону составных хранилищ (IStorage/IStream) там они за тебя все отформатируют как надо, но самый оптимальный конечно-же будет ZIP, помимо автоматической генерации оффсетов на данные он их еще и пожмет, двойная выгода панимашь :)
ЗЫ: Германн, ссылочку лучше такого вида давать :)
http://rouse.drkb.ru/components.php#fwzip


 
Германн ©   (2011-04-01 19:26) [12]


> Германн, ссылочку лучше такого вида давать

ОК


 
Baks   (2011-04-01 20:22) [13]

Спасибо, попробую.


 
w   (2011-04-01 21:08) [14]


> можно посмотреть так-же в сторону составных хранилищ (IStorage/IStream)
> там они за тебя все отформатируют


тьфу какая гадость


 
Rouse_ ©   (2011-04-01 21:19) [15]


> w   (01.04.11 21:08) [14]
> тьфу какая гадость

Согласен, ограничения есть, но в простых вариантах хранилища использовать очень даже не плохо. MS от них только в новом офисе отказались


 
w   (2011-04-01 21:37) [16]


>  в новом офисе

тьфу какая гадость :))


 
МазутычЪ   (2011-04-02 09:34) [17]

Есть такой мудрый формат - TIFF, как раз для записи нескольких графических изобажений в один файл...


 
oldman ©   (2011-04-02 11:41) [18]


> несколько TBitmap в один файл


А БД это один файл?


 
oldman ©   (2011-04-02 11:52) [19]

Только я тебе не помощник в этом деле. Сам договаривайся. Я тебе идею выдал?


 
DVM ©   (2011-04-02 11:53) [20]

Лучше такой формат:

1. Сначала в файл пишется смещение до раздела индексов (до записи индексов там 0)
2. Затем пишутся сами картинки (попутно запоминаем смещения до каждой из них)
3. Пишем смещения друг за другом (индексы)
4. Правим в начале файла смещение до раздела индексов

Это самый оптимальный вариант, позволяет записать в один файл сколько угодно картинок и даже дописывать их туда.

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


 
DVM ©   (2011-04-02 11:55) [21]

Во многих видеоконтейнерах примерно так, индексы в конце файла.


 
Baks   (2011-04-02 22:24) [22]


> oldman [18]


Да, это наверно тоже может подойти.


> DVM ©   (02.04.11 11:53) [20]


Теперь попробую с индексами в конце. Я тоже об этом думал.


 
w   (2011-04-03 07:35) [23]


>  У меня D5

а я всегда думал - панацея D7 )


 
Baks   (2011-04-03 20:52) [24]


> w [23]


У меня на ней давно созданные проекты с компонентами, которые только для неё. Например, DelphiX, пользуюсь, что бы там не говорили. А на D7 тоже некоторые программы создаю.



Страницы: 1 вся ветка

Текущий архив: 2011.07.17;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.011 c
15-1301468622
eclipse
2011-03-30 11:03
2011.07.17
"Тест драйв" программы


2-1301819904
Leon-Z
2011-04-03 12:38
2011.07.17
ООП. Как сделать правильнее ???


15-1301662575
ddd329
2011-04-01 16:56
2011.07.17
Delphi затребовал регистрацию


1-1259184597
TStas
2009-11-26 00:29
2011.07.17
Косяк с медиаплейером


2-1302808428
Алекс_123
2011-04-14 23:13
2011.07.17
RichEdit прокрутка текста