| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Звук, графика и видео > GDI+: Загрузка PNG из потока |
| Автор: JohnJ2 21.4.2009, 11:36 | ||||
| Здравствуйте! Не могу разобраться в следующей ситуации: Загружаю картинку из потока:
Поток получаю от TIdHTTP.Get, которому задаю адрес любой картинки PNG (например: http://nigma.ru/themes/nigma/img/nigma-logo-small.png), и передаю в вышеприведённую процедуру. Такой вариант работает, но! На строке "imgFile := TGPImage.Create(aptr);" появляется окошко с ассемблеровским кодом с заголовком "CPU". Содержимое выделенной строки (если как-то поможет) "7С90120F C3 ret". Чуть выше строчка "{ntdll.DbgBreakPoint}". Когда я закрываю это ассемблеровское окошко и нажимаю F9, то картинка рисуется как ни в чём не бывало. Если из потока сохранять сначала в файл и потом загружать из файла в TGPImage, то всё работает без проблем. А почему тут такая фигушка? P.S.: Пробовал aptr создавать так: aptr := TStreamAdapter.Create(aStream, soReference); Ничего не изменилось. Другие форматы картинок (bmp, jpg, gif) открываются без проблем, а при png возникает такое вот "прерывание". Саму технологию загрузки в TGPImage изучал по статье: http://forum.vingrad.ru/faq/topic-157721.html Нашёл, что и у других были подобные проблемы с png: http://www.rsdn.ru/Forum/Message.aspx?mid=386854, и найдено решение, но ссылка на приведённое решение не грузится. Я плохо разбираюсь в английском, поэтмоу не понял, эта статья по теме или нет, но что-то тоже с проблемами png и gdi: http://lummie.co.uk/tstreamadapter-and-images/
И если по теме, то как мне это можно использовать? Заранее благодарен за Вашу помощь. |
| Автор: JohnJ2 21.4.2009, 12:21 | ||||
| Нашёл ответ, точнее мне помогли в другом месте. Публикую решение сюда: Как я понял, функция Stat у TStreamAdapter неправильно определяет дату и время png-файла. Чтобы это исправить, мы её перепишем:
Не смотря на то, что я не понимаю назначения практически ни одной строчки вышеприведённого кода, это работает. Использовать, в моём случае, так:
Что очень важно, остальные форматы картинок, которые поддерживались и ранее (jpg, bmp, gif) точно также открываются без ошибок, как и png сейчас. |