Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > ImageList и Bitmap.PixelFormat = pf32bit


Автор: Illusion Dolphin 13.9.2010, 13:01
Всем добрый день!
Давно столкнулся с проблемой загрузки изображения с прозрачностью в ImageList, суть проблемы такова: если надо загрузить изображение где определённый цвет будет прозрачным, то проблем никаких нет - существует маска однобитовая (ImageList_Add) или просто TransparentColor (ImageList_AddMasked). А как быть если в изображении есть не только прозначные, но и полупрозрачные элементы? Существует ли возможность Bitmap с PixelFormat = pf32bit корректно загрузить в ImageList ? 

P.S. Версии Windows ниже XP не рассматриваются.

Автор: Snowy 13.9.2010, 13:33
Для полупрозрачных изображений лучше использовать png
C ico и bitmap постоянно какие-то заморочки.

Автор: Illusion Dolphin 14.9.2010, 11:58
Цитата

лучше использовать png

Изображение формируется в runtime, я могу его и в PNG перевести, но изображение будет использоваться как Drag&Drop картинка, для Drag&Drop PNG неприменим. 
Вопрос всё же открыт.

P.S. Как результат - предполагается сделать Drag&Drop файлов в стиле Windows7. 

Автор: Alexeis 14.9.2010, 13:46
Цитата(Illusion Dolphin @  13.9.2010,  12:01 Найти цитируемый пост)
Существует ли возможность Bitmap с PixelFormat = pf32bit корректно загрузить в ImageList ? 

  Для версии 2010 сказано >ImageLists also support 32-bit format, so alpha blended bitmaps and PNG files work properly. 
Мне думается что это поддержка взялась от TPngImageList. 

Цитата(Illusion Dolphin @  14.9.2010,  10:58 Найти цитируемый пост)
Изображение формируется в runtime, я могу его и в PNG перевести, но изображение будет использоваться как Drag&Drop картинка, для Drag&Drop PNG неприменим. 

  Я могу ошибаться, но вероятнее всего в памяти png объект храниться в виде 2х битмапов 24 бит и 8 бит для альфы (речь о картинке с альфой), поэтому операции должны производиться не намного медленнее чем с битмаопом 32 бита. Собственно сжатие должно производиться лишь при сохранении в файл.  

Автор: Illusion Dolphin 14.9.2010, 16:03
Всё тестировалось изначально на D2010.
Танцы с бубном решили проблему. Судя по всему проблема возникала только в связке с Drag&drop, т.к. при обычном TImageList.Draw никаких сбоев не наблюдалось. Тестирование показало что если изображение имеет в точке ПОЛНУЮ ПРОЗРАЧНОСТЬ то прозрачность почему-то отбрасывалась. Мне сие не понятно, но ограничение максимальной прозрачности до 1 (единицы) решило проблему. 

Всем спасибо за участие!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)