Обходной путь для ошибки прозрачности ImageList? - PullRequest
6 голосов
/ 06 марта 2009

Если вы добавляете изображение PNG в элемент управления ImageList и используете этот ImageList с ListView или TreeView в приложении Windows Forms (.Net 2.), значки, отображаемые в ListView, имеют синий «ореол» вокруг них.

Например:

alt text
(источник: wordpress.com )

Кто-нибудь знает обходной путь, позволяющий вам добавлять 32-битные PNG с альфа-каналом в ImageList и сохранять прозрачные пиксели и избегать эффекта ореола / ошибки?

Спасибо.

1 Ответ

11 голосов
/ 06 марта 2009

Я не думаю, что это ошибка. У вас должна быть установлена ​​глубина цвета ImageList 32-битная, и вы должны использовать визуальные стили.

Если в приложении включены визуальные стили, WinForms использует версию 6.0 общих элементов управления Windows, которая поддерживает альфа-прозрачность. В противном случае он будет использовать предыдущую версию, которая не поддерживает альфа-прозрачность и неправильно отображает изображения ARGB с голубым ореолом.

Если вам нужен обходной путь, вы можете попробовать создать новые растровые изображения того же размера, заполнив их BackColor ListView, создав объект Graphics на растровом изображении и нарисовав изображение ARGB на растровом изображении. Затем вы можете вставить эти предварительно смешанные растровые изображения в ImageList. Однако, если вы сделаете это, выделение будет выглядеть забавно на значке в ListView.

Другим обходным решением может быть прямой доступ к данным растрового изображения (с помощью LockBits ()) и ручное смешивание любых полупрозрачных пикселей, что приведет к правильной визуализации изображений и их отображению в основном так, как они должны быть при выборе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...