2009-03-06 11 views
5

Si agrega una imagen PNG a un control ImageList y utiliza esa ImageList con un ListView o TreeView en una aplicación de Windows Forms (.Net 2.), los iconos que se muestran en ListView tienen un "halo" azul a su alrededor.¿Solución para el error de transparencia ImageList?

Ej:

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

¿Alguien sabe una solución alternativa que le permite añadir archivos PNG de 32 bits con un canal alfa a un ImageList y retener a los píxeles transparentes y evitar el efecto de halo/bug?

Gracias.

Respuesta

10

No creo que esto sea un error. Debería tener la profundidad de color ImageList establecida en 32 bits, y debe usar estilos visuales.

Si la aplicación tiene estilos visuales habilitados, WinForms usa la versión 6.0 de los controles comunes de Windows, que admite la transparencia alfa. De lo contrario, utilizará la versión anterior que no admite transparencia alfa, y representa incorrectamente las imágenes ARGB con un halo azul.

Si necesita una solución alternativa, puede intentar crear nuevos mapas de bits del mismo tamaño, llenándolos con BackColor de ListView, creando un objeto Graphics en el mapa de bits y dibujando su imagen ARGB en el mapa de bits. Luego puede insertar estos mapas de bits previamente borrados en ImageList. Sin embargo, si hace esto, la selección se verá divertida en el ícono en el ListView.

Otra solución alternativa sería acceder directamente a los datos del mapa de bits (utilizando LockBits()) y mezclar manualmente los píxeles semitransparentes, lo que hará que las imágenes se rendericen correctamente y se vean como deberían cuando se seleccionan .

Cuestiones relacionadas