2009-03-06 3 views
5

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

Например:

alt text http://deeperdesign.wordpress.com/files/2009/03/blue-halo.png

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

Спасибо.

ответ

10

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

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

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

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

Смежные вопросы