Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TPicture.LoadFromFile - интерпритация формата по содержимому.


Страницы:   1 2 3

Akad ©   (2011-02-27 16:56:00) 

Есть много картинок. У части из них попутаны расширения, то есть png имеют расширение jpeg, gif - png и так далее.
Как известно в борланде работая над TPicture.LoadFromFile пошли по самому простому пути - интерпретация формата файла по расширению, то есть картинки с не правильным расширением эта функция не загрузит.
Вопрос: как с минимумом телодвижений загрузить картинку в TPicture.Graphic? Очень не хочется самому анализировать и переименовывать файл. Должно же быть нормальное готовое решение!


Соискатель   (2012-03-30 13:42:00) [21]

Библиотек мало, потому что язык не тот и не в топе


Соискатель   (2012-03-30 13:41:00) [22]


> То, что сперва проверяется расширение файла, а только потом
> он открывается и считывается (а если его формат не соответствует
> ожидаемому только тогда следует ругань) - это как раз стандарт.
>

Все просмоторщики изображений включая проводник написаны не по этому стандарту. И это хорошо.


clickmaker   (2011-03-18 17:08:00) [23]

а я вообще не понял, как "как с минимумом телодвижений загрузить картинку в TPicture.Graphic?" связано с "Обошёл я эту кривость дельфи и всех сторонних приблуд к ней с помощью анализа трафика" и "У меня все файлы из web перекачёвывают в БД"?


Amoeba_   (2011-03-18 17:01:00) [24]


> кривость дельфи и всех сторонних приблуд к ней

LMD!
Не надо с больной головы валить за здоровую. Никакой кривости нет. То, что сперва проверяется расширение файла, а только потом он открывается и считывается (а если его формат не соответствует ожидаемому только тогда следует ругань) - это как раз стандарт.


Akad   (2011-03-18 15:11:00) [25]


> но ты грузишь почему то с файла... библиотека виновата?

Где я такое написал? У меня все файлы из web перекачёвывают в БД.

P.S. Ладно. Обошёл я эту кривость дельфи и всех сторонних приблуд к ней с помощью анализа трафика. Вопрос закрывается, так как нормального решения не имеет.


Dimka Maslov   (2011-03-18 14:09:00) [26]


> общем это далеко не минута по времени написания кода.


А я вот всегда замечал, что к коде, написанном за минуту, больше удельное число ошибок на один байт, нежели в коде, написанном за час.


sniknik   (2011-03-18 13:55:00) [27]

> обязаныгрузиться из потока.
но ты грузишь почему то с файла... библиотека виновата?


clickmaker   (2011-03-18 13:09:00) [28]

> Неужели не существует нормальных библиотек для работы с
> графикой в дельфи??? Не верю!

у тебя есть шанс стать первым и войти в историю. Тем более, что не с нуля придется начинать


Akad   (2011-03-18 12:55:00) [29]


> Что мешает перед загрузкой файла проверить по сигнатуре
> тип файла, дать ему (или копии) правильное расширение, а
> потом загрузить файл обычным порядком?

В том-то и дело, я надеялся на то, что
Во-первых не придётся изобретать велосипед.
Во-вторых например с тем-же jpeg не всё так просто. Надо первые 2 байта смотреть, а потом идти по SOI/EOI что бы убедиться, что это jpeg, а не например mpeg или mjpeg или что-нибудь подобное. В общем это далеко не минута по времени написания кода.

> Нормальные библиотеки совершенно не обязаны разбираться
> с бардаком в виде перепутанных расширений. Это никак не
> входит в круг их задач.

Обязаны. Нормальные библиотеки обязаны грузиться из потока. А там расширений нет. В прочем как и нет нормальных библиотек для открытия картинок под дельфи, на сколько я понял...


Amoeba_   (2011-03-18 12:46:00) [30]


> Неужели не существует нормальных библиотек для работы с
> графикой в дельфи???

Нормальныебиблиотеки совершенно не обязаны разбираться с бардакомв виде перепутанных расширений. Это никак не входит в круг их задач.


Dimka Maslov   (2011-03-18 12:45:00) [31]

Akad   (18.03.11 12:08) [11]

Что мешает перед загрузкой файла проверить по сигнатуре тип файла, дать ему (или копии) правильное расширение, а потом загрузить файл обычным порядком?

Дополнительно сообщу, что
а) в начале bmp находятся два байта BM
б) начиная с 7-го байта в файлах jpg находятся знаки JFIF
в) в начале png со 2-го байта есть символы PNG


Akad   (2011-03-18 12:41:00) [32]


> CanLoad не зря сделана class function для удобства.Т.е.
> запросто можно реализовать перебор вызовов TXXXGraphic.CanLoad
> с последующим созданием подошедшего объекта

Т.е резюме: ни какого преимущества/удобства и пр. GraphicEx не даёт. Всё та же убогость, что и в стандартной поставке дельфи. Просто добавляет немного экзотических форматов картинок и всё.
Неужели не существует нормальных библиотек для работы с графикой в дельфи??? Не верю!


clickmaker   (2011-03-18 12:24:00) [33]

> Мне надо загрузить, а не спрашивать может ли он загрузить
> jpeg.

CanLoad не зря сделана class function для удобства.
Т.е. запросто можно реализовать перебор вызовов TXXXGraphic.CanLoad с последующим созданием подошедшего объекта


Akad   (2011-03-18 12:12:00) [34]


> use TGraphicExGraphic

Ну тоже с ходу не умеет.
  Graphic := TGraphicExGraphic.Create;
  Graphic.LoadFromStream(stream); //Получаю bitmap image is not valid.

> + CanLoad()

А что это даст? Мне надо загрузить, а не спрашивать может ли он загрузить jpeg.


Akad   (2011-03-18 12:08:00) [35]


> По сигнатурам файлов вполне возможно отличить джипег от
> битмапа и пнга.

Мне нужно не отличить, а загрузить. Понятно, что можно убить неделю и самому написать нормальные загрузчики, вместо кривых дельфёвых, но подозреваю, что это будет изобретением велосипеда.
Хотя с другой стороны поиск в гугле выводит только на GraphicEx, которая работать у меня отказывается, а во всех их примерах они вместо нормальной загрузки просто определяют что за тип изображения в файле и грузят соответствующим классом. Всё бы ничего, но FileFormatList например не умеет потоки.
Так что похоже всё-же придётся велосипед изобрести. :(


clickmaker   (2011-03-18 12:04:00) [36]

+ CanLoad()


clickmaker   (2011-03-18 12:01:00) [37]

use TGraphicExGraphic


Amoeba_   (2011-03-18 11:54:00) [38]


> Очень не хочется самому анализировать
> и переименовывать файл. Должно же быть нормальное готовое
> решение!

Хоть и не хочется анализировать и переименовывать, а придется. Готового решения нет.


Dimka Maslov   (2011-03-18 11:47:00) [39]

По сигнатурам файлов вполне возможно отличить джипег от битмапа и пнга.


Akad   (2011-03-18 11:20:00) [40]


> Не то что странного, а просто невозможного хочешь.

Почему не возможного? См. первый пост. 2 человека ответило, что это без проблем делается через GraphicEx.
А вообще говоря мне надо всё это дело из потока грузить, из БД. Ну это уже мелочи, главное научиться нормально загружать картинки. Например из .tmp файла.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо