![]() |
Модераторы: Snowy, Alexeis, MetalFan |
![]() ![]() ![]() |
|
Akella |
|
||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 1 Всего: 329 |
Не могу найти нормально работающего примера, чтобы качественно увеличить PNG с alpha-каналом.
Delphi XE2 На сайте абракадабры (EDN>>CodeCentral) есть примеры работы с PNG: http://cc.embarcadero.com/Item/25631, в том числе и есть пример процедуры SmoothResize. Там есть такой кусок кода:
Проблема в том, что у меня изображение имеет apng.Header.ColorType равный 3, а именно COLOR_PALETTE
поэтому вываливается Exception Я с изображениями вообще не работал. Поэтому нужна процедура изменения размера PNG. Или как "конвертировать" существующее изображение, чтобы эта процедура схавала мой png и не подавилась? Может можно как сконвертировать изображение из COLOR_PALETTE в COLOR_RGBALPHA или в COLOR_RGB? |
||||
|
|||||
Illusion Dolphin |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 13 Всего: 63 |
Вот как перегнать из PNG с COLOR_PALETTE в TBitmap:
Замем если получилось 24 bit каритинка то просто PNGImage.Assign делаешь, если же 32 бита получилось, то:
Работает 32\64 бита. Быстрее только ассемблер наверное. А дальше - функция SmoothResize ![]() -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
||||
|
|||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 1 Всего: 329 |
ОК, спасибо, попобую завтра
![]() Добавлено через 50 секунд Я пробовал этот пример с GDI+ http://kachkarvv.org.ua/faq/src-delphi/del...jpg-gdi-rsz.php, вроде работает, но приходится через промежуточный файл. |
|||
|
||||
Illusion Dolphin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 13 Всего: 63 |
GDI+ может работать через стримы (GdipLoadImageFromStream/GdipSaveImageToStream) так что можно без файлов обойтись и работать со стримами бещ лишних файлов. Но я не уверен что будет работать в случает прозрачной картинки (COLOR_PALETTE с прозрачностью). -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 1 Всего: 329 |
мне кажется, что потеряется альфа-канал и картинка в итоге будет искажённой, а там цифры, которые мне нужно ещё распознать в текст :( Добавлено через 2 минуты и 51 секунду А как можно убрать альфа-канал, заменив прозрачность, например, на красный или синий цвет? Там прозрачные цифры, и мне их нужно распознать в текст. |
|||
|
||||
x128 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 29.9.2009 Репутация: 5 Всего: 7 |
Не знаю как в Delphi XE2 обстоят дела с alpha-каналом для палитровых PNG, но в оригинальном компоненте который стал донором доступ осуществлялся напрямую через соответствующие чанки. Для палитры это TChunkPLTE, для прозрачности TChunktRNS.
для tRNS.PaletteValues[i] индексы i соответствуют индексам палитры и содержат значения альфа-прозрачности для каждого цвета в палитре. |
|||
|
||||
Illusion Dolphin |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 13 Всего: 63 |
А там разве зря 2 ветки - для прозначного и непрозрачного PNG? ![]()
Если не получается - можешь скинуть картинку для примера я посмотрю. Как сказал x128, возможно правильнее смотреть прозрачность через TChunktRNS чанк, но я не видел png, который бы неправильно отобразился в коде который дал я (если такой png есть просьба показать его ![]() -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
||||||
|
|||||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 1 Всего: 329 |
Пока не пробовал. Но картнку на всяк случай приложил
Присоединённый файл ( Кол-во скачиваний: 16 ) ![]() |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 1 Всего: 329 |
||||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 1 Всего: 329 |
||||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 1 Всего: 329 |
Я правильно объявил?
Присоединённый файл ( Кол-во скачиваний: 3 ) ![]() |
|||
|
||||
Akella |
|
||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 1 Всего: 329 |
в этой процедуре на итерации, когда I = 7, ошибка, AV
во "второй" части процедуры, после end else begin |
||||
|
|||||
Illusion Dolphin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 13 Всего: 63 |
Ох, тут придётся модифицировать код, т.к. он только для 8 бит, а тут 4.... -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
x128 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 29.9.2009 Репутация: 5 Всего: 7 |
Прикрепил пример. В примере любой PNG приводится к единому формату RGBA и результат ресайзится.
Это сообщение отредактировал(а) x128 - 2.8.2012, 21:48 Присоединённый файл ( Кол-во скачиваний: 36 ) ![]() |
|||
|
||||
x128 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 29.9.2009 Репутация: 5 Всего: 7 |
Хм... Заметил странную особенность, StretchBlt в режиме HALFTONE не сглаживает приложенную картинку при увеличении... Но это мелочи. Меня больше интересует, зачем нужно эту картинку обрабатывать с прозрачностью и зачем работать с PNG напрямую? Я так полагаю, что будет какая-то обработка и скорее всего распознавание и в таком случае достаточно получить битмап и без прозрачности.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Звук, графика и видео" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |