IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

 
 Ответить  Открыть новую тему 
> Размер (в байтах) Jpeg'а ДО его записи...
AlienEmperor
сообщение 26.05.2005 10:21
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 160
Пол: Мужской
Реальное имя: Серый

Репутация: -  0  +


Собственно, вопрос: мне нужно создать файл, содержащий описание (record) и произвольное число JPEG'ов, котороые получаются преобразованием из BMP-файлов... Для такого файла нужно сделать Header, в который поместить размер каждого файла (смещение от начала)... Можно ли как-нибудь узнать размер JPEG'а не сохраняя его на диск ?


--------------------
Все в жизни ботва... Кроме пчел!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Digitalator
сообщение 27.05.2005 14:06
Сообщение #2


Бывалый
***

Группа: Пользователи
Сообщений: 247
Пол: Мужской

Репутация: -  1  +


Первое что приходит на ум....
можно сохранить TJpegImage в TStream с помощью метода JpegImage.SaveToStream, а потом узнать размер в stream.size. Этот же stream можно будет позже использовать для записи в файл.


--------------------
In byte we trust
ICQ World.ru
mail[dog]digitalator[dot]com
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
AlienEmperor
сообщение 31.05.2005 8:56
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 160
Пол: Мужской
Реальное имя: Серый

Репутация: -  0  +


В принцыпе, так я и сделал... Header сохраняет размер файла по разности до и после записи... Вроде работает... Блин, с битмапами намного проще, неужели они не могли в Header JPEG'а вставить его размер ?


--------------------
Все в жизни ботва... Кроме пчел!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hiv
сообщение 31.05.2005 9:12
Сообщение #4


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Дело не в этом... просто JPEG это не только компрессия, но и формат записи файла. А в памяти для отображения картинки на экране изображение храниться в формате BMP, т.к. это стандарт при работе с GDI Windows-а. Поэтому если хочешь не сохраняя в файл получить в памяти JPEG структуру, то используй описанный метод - сохраняй в TMemoryStream.


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
AlienEmperor
сообщение 31.05.2005 9:41
Сообщение #5


Бывалый
***

Группа: Пользователи
Сообщений: 160
Пол: Мужской
Реальное имя: Серый

Репутация: -  0  +


2hiv: дык, а так и сделал уже... Я с самого начала так сделал, когда еще вопрос даже не задал... Просто мне не очень нравится такой подход...

P.S. Кстати, в Delphi5 при использовании модуля JPEG и потоков, я обнаружил интересную фигню: при попытке считать файл из потока (MyJPEG1.LoadFromStream(MyStream)) в файл MyJPEG1 считываются ВСЕ JPEG'и из заданного потока... Пришлось из примеров выдирать JPEG.PAS и перекомпилировать его, перенеся метод ReadStream из Protected в Public..., там хотя бы указывается размер считываемой информации...


--------------------
Все в жизни ботва... Кроме пчел!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hiv
сообщение 31.05.2005 15:47
Сообщение #6


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Цитата(AlienEmperor @ 31.05.05 9:41)
Просто мне не очень нравится такой подход...

Еще раз говорю - этот подход задает Билл Гейтс. Так что все эмоции к нему, а не в Delphi. К примеру у UNIX систем стандартным является PNG файл, который может иметь компрессию, но дело в том что библиотека компрессии zlib стандартно поставляется с системой и ей юзается. А нестандартные форматы формируются при сохранении.


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
AlienEmperor
сообщение 1.06.2005 12:10
Сообщение #7


Бывалый
***

Группа: Пользователи
Сообщений: 160
Пол: Мужской
Реальное имя: Серый

Репутация: -  0  +


Цитата
Так что все эмоции к нему, а не в Delphi.


Что-то я не заметил в своем тексте эмоций к Delphi вообще (у меня к ней они вообще исключительно положительные)... Разве Inprise (Borland) формат JPEG придумали ? Что-то мне подсказывает, что и не Билли... В заголовке битмапа-то инфа о размере есть... Так и тут надо было сделать, вот я про что говорил. (При создании самого заголовка, он ведь есть не зависимо от того, записан файл на диск или нет - память-то используется).


--------------------
Все в жизни ботва... Кроме пчел!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hiv
сообщение 1.06.2005 12:38
Сообщение #8


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Цитата
Пришлось из примеров выдирать JPEG.PAS и перекомпилировать его, перенеся метод ReadStream из Protected в Public...
Создай потомка типа JPEG (например MJPEG - движущегося JPEG) и переопредели методы ReadStream и WriteStream - вот и все! Красиво и все по ООП технологии.


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
AlienEmperor
сообщение 1.06.2005 14:29
Сообщение #9


Бывалый
***

Группа: Пользователи
Сообщений: 160
Пол: Мужской
Реальное имя: Серый

Репутация: -  0  +


Цитата
Красиво и все по ООП технологии.


Согласен... В конечном варианте так и сделаю.
Благо там три строчки написать надо... smile.gif


--------------------
Все в жизни ботва... Кроме пчел!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 27.07.2025 15:06
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"