![]() |
Модераторы: 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 напрямую? Я так полагаю, что будет какая-то обработка и скорее всего распознавание и в таком случае достаточно получить битмап и без прозрачности.
|
|||
|
||||
Illusion Dolphin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 13 Всего: 63 |
А вот и обновление, проверил со всеми вроде бы возможными форматами для COLOR_PALETTE:
Добавлено @ 22:10 x128, В твоём коде есть пара моментов: 1) Не thread-safe (если, конечно, это не требуется). В моём случае это поддерживается. 2) Не работает с некоторыми изображениями (если это важно - в аттаче пример). Это сообщение отредактировал(а) Illusion Dolphin - 2.8.2012, 22:35 Присоединённый файл ( Кол-во скачиваний: 16 ) ![]() -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
x128 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 29.9.2009 Репутация: 5 Всего: 7 |
Действительно, что-то я с COLOR_GRAYSCALE тормознул... Присоединённый файл ( Кол-во скачиваний: 22 ) ![]() |
|||
|
||||
Akella |
|
||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 1 Всего: 329 |
Да, имеено bitmap я в итоге и хочу получить!! Нормальный, читабельный bitmap. Теми простыми способами через <TImage>.Picture.Graphic с пересохранением, получается плохо. Компонента распознавания видиц цифры, но плохо распознает. А когда я исходный png конвертирую в bitmap с помощью ACDSee, то компонента распознавания прекрасно распознает, почти на 100%. Автор компоненты,которую я купил (winsoае ocr) молчит, никаких рекомендаций не даёт. |
||||
|
|||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 1 Всего: 329 |
Illusion Dolphin, ты так и не ответил, что за prgb и prgb32
|
|||
|
||||
Akella |
|
||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 1 Всего: 329 |
x128, почему на этой строке src принимает значение nil
вызываю так:
|
||||
|
|||||
x128 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 29.9.2009 Репутация: 5 Всего: 7 |
Скорее всего, изображение не имеет альфа-канала. Перед вызовом ResizePNG, нужно преобразовать PNG через ConvertToRGBA. И еще, ResizePNG в это функция которая возвращает новый PNG, эсли ты не переделывал, то вызов должен быть другим.
Это сообщение отредактировал(а) x128 - 3.8.2012, 11:25 |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 1 Всего: 329 |
||||
|
||||
x128 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 29.9.2009 Репутация: 5 Всего: 7 |
Scanline и AlphaScanline немного разные вещи. Процедура ConvertToRGBA преобразовывает png в COLOR_RGBALPHA, а функция ResizePNG работает исключительно с этим форматом. Переписать можно как нужно или удобно, я просто хотел наглядно показать что и как. |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 1 Всего: 329 |
ага понял, спасибо
Добавлено через 1 минуту и 30 секунд Теперь вопрос по преобразованию в BMP. Вот мой код
в итоге картинка bmp выглядит не совсем читабельно: ![]() как бы мне прозрачность перевести в белый цвет? |
|||
|
||||
x128 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 29.9.2009 Репутация: 5 Всего: 7 |
как-то так:
|
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 1 Всего: 329 |
Да вы просто шайтаны
![]() ![]() ![]() |
|||
|
||||
Illusion Dolphin |
|
||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 13 Всего: 63 |
Вроде уже что надо было получили, но раз вопрос есть отвечу
![]()
Это описание пиксела для 24 и 32 битных битмапов, вот описание полное:
Я смотрю тут автоматизатор капчи делается, не знаю какое их количество, но если много или они не из главного потока обрабатываются то код с канвой будет раз на 10 случаев (приблизительно) выдавать пустой результат.
Применимо к моему коду там есть коментарий - "//set directly to 255 to disable transparency" - вот если проверить тут прозрачность то можно делать фон любого цвета устанавливая другие значения и если надо через прозрачность:
-------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
||||||||
|
|||||||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 1 Всего: 329 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "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. |