![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() ![]() |
![]() |
AlienEmperor |
![]()
Сообщение
#1
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 160 Пол: Мужской Реальное имя: Серый Репутация: ![]() ![]() ![]() |
Собственно, вопрос: мне нужно создать файл, содержащий описание (record) и произвольное число JPEG'ов, котороые получаются преобразованием из BMP-файлов... Для такого файла нужно сделать Header, в который поместить размер каждого файла (смещение от начала)... Можно ли как-нибудь узнать размер JPEG'а не сохраняя его на диск ?
-------------------- Все в жизни ботва... Кроме пчел!
|
Digitalator |
![]()
Сообщение
#2
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 247 Пол: Мужской Репутация: ![]() ![]() ![]() |
Первое что приходит на ум....
можно сохранить TJpegImage в TStream с помощью метода JpegImage.SaveToStream, а потом узнать размер в stream.size. Этот же stream можно будет позже использовать для записи в файл. -------------------- |
AlienEmperor |
![]()
Сообщение
#3
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 160 Пол: Мужской Реальное имя: Серый Репутация: ![]() ![]() ![]() |
В принцыпе, так я и сделал... Header сохраняет размер файла по разности до и после записи... Вроде работает... Блин, с битмапами намного проще, неужели они не могли в Header JPEG'а вставить его размер ?
-------------------- Все в жизни ботва... Кроме пчел!
|
hiv |
![]()
Сообщение
#4
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 660 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
Дело не в этом... просто JPEG это не только компрессия, но и формат записи файла. А в памяти для отображения картинки на экране изображение храниться в формате BMP, т.к. это стандарт при работе с GDI Windows-а. Поэтому если хочешь не сохраняя в файл получить в памяти JPEG структуру, то используй описанный метод - сохраняй в TMemoryStream.
-------------------- Никогда не жадничай. Свои проблемы с любовью дари людям!
|
AlienEmperor |
![]()
Сообщение
#5
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 160 Пол: Мужской Реальное имя: Серый Репутация: ![]() ![]() ![]() |
2hiv: дык, а так и сделал уже... Я с самого начала так сделал, когда еще вопрос даже не задал... Просто мне не очень нравится такой подход...
P.S. Кстати, в Delphi5 при использовании модуля JPEG и потоков, я обнаружил интересную фигню: при попытке считать файл из потока (MyJPEG1.LoadFromStream(MyStream)) в файл MyJPEG1 считываются ВСЕ JPEG'и из заданного потока... Пришлось из примеров выдирать JPEG.PAS и перекомпилировать его, перенеся метод ReadStream из Protected в Public..., там хотя бы указывается размер считываемой информации... -------------------- Все в жизни ботва... Кроме пчел!
|
hiv |
![]()
Сообщение
#6
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 660 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
Цитата(AlienEmperor @ 31.05.05 9:41) Просто мне не очень нравится такой подход... Еще раз говорю - этот подход задает Билл Гейтс. Так что все эмоции к нему, а не в Delphi. К примеру у UNIX систем стандартным является PNG файл, который может иметь компрессию, но дело в том что библиотека компрессии zlib стандартно поставляется с системой и ей юзается. А нестандартные форматы формируются при сохранении. -------------------- Никогда не жадничай. Свои проблемы с любовью дари людям!
|
AlienEmperor |
![]()
Сообщение
#7
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 160 Пол: Мужской Реальное имя: Серый Репутация: ![]() ![]() ![]() |
Цитата Так что все эмоции к нему, а не в Delphi. Что-то я не заметил в своем тексте эмоций к Delphi вообще (у меня к ней они вообще исключительно положительные)... Разве Inprise (Borland) формат JPEG придумали ? Что-то мне подсказывает, что и не Билли... В заголовке битмапа-то инфа о размере есть... Так и тут надо было сделать, вот я про что говорил. (При создании самого заголовка, он ведь есть не зависимо от того, записан файл на диск или нет - память-то используется). -------------------- Все в жизни ботва... Кроме пчел!
|
hiv |
![]()
Сообщение
#8
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 660 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
Цитата Пришлось из примеров выдирать JPEG.PAS и перекомпилировать его, перенеся метод ReadStream из Protected в Public... Создай потомка типа JPEG (например MJPEG - движущегося JPEG) и переопредели методы ReadStream и WriteStream - вот и все! Красиво и все по ООП технологии.-------------------- Никогда не жадничай. Свои проблемы с любовью дари людям!
|
AlienEmperor |
![]()
Сообщение
#9
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 160 Пол: Мужской Реальное имя: Серый Репутация: ![]() ![]() ![]() |
Цитата Красиво и все по ООП технологии. Согласен... В конечном варианте так и сделаю. Благо там три строчки написать надо... ![]() -------------------- Все в жизни ботва... Кроме пчел!
|
![]() ![]() |
![]() |
Текстовая версия | 27.07.2025 15:06 |