![]() |
Модераторы: Snowy, Alexeis, MetalFan |
![]() ![]() ![]() |
|
JohnJ2 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 19.4.2009 Репутация: 1 Всего: 1 |
Здравствуйте! Не могу разобраться в следующей ситуации:
Загружаю картинку из потока:
Поток получаю от 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: вопрос по подобной проблеме, и найдено решение, но ссылка на приведённое решение не грузится. Я плохо разбираюсь в английском, поэтмоу не понял, эта статья по теме или нет, но что-то тоже с проблемами png и gdi: http://lummie.co.uk/tstreamadapter-and-images/
И если по теме, то как мне это можно использовать? ![]() Заранее благодарен за Вашу помощь. |
||||
|
|||||
JohnJ2 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 19.4.2009 Репутация: 1 Всего: 1 |
Нашёл ответ, точнее мне помогли в другом месте.
Публикую решение сюда: Как я понял, функция Stat у TStreamAdapter неправильно определяет дату и время png-файла. Чтобы это исправить, мы её перепишем:
Не смотря на то, что я не понимаю назначения практически ни одной строчки вышеприведённого кода, это работает. Использовать, в моём случае, так:
Что очень важно, остальные форматы картинок, которые поддерживались и ранее (jpg, bmp, gif) точно также открываются без ошибок, как и png сейчас. Это сообщение отредактировал(а) JohnJ2 - 21.4.2009, 12:22 |
||||
|
|||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Она просто не может ее определить, потому что такая информация не хранится. Тут похоже косяк в самом GDI+, который неправильно анализирует полученную информацию о дате. Просто нулевые значения его не устраивают, поэтому вместо нулевых туда записали текущие. Хорошо что решился вопрос. Можно было поискать обновления библиотеки GDIPlus.dll -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Звук, графика и видео" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |