Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2011.07.17;
Скачать: [xml.tar.bz2];

Вниз

Как лучше записать несколько 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.046 c
2-1302510695
MAX
2011-04-11 12:31
2011.07.17
изменить структуру dbf


15-1301603395
Юрий
2011-04-01 00:29
2011.07.17
С днем рождения ! 1 апреля 2011 пятница


15-1301492829
young_dev
2011-03-30 17:47
2011.07.17
большие процедуры/функции


2-1302005274
Германн
2011-04-05 16:07
2011.07.17
Как запретить изменение ширины колонок в ListView?


15-1301922483
OW
2011-04-04 17:08
2011.07.17
Как можно облажаться в коде





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский