2009-03-06 7 views
5

Si vous ajoutez une image PNG à un contrôle ImageList et utilisez cette ImageList avec ListView ou TreeView dans une application Windows Forms (.Net 2.), les icônes affichées dans le ListView sont entourées d'un "halo" bleu.Solution de contournement pour le bogue de transparence ImageList?

Par exemple:

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

Est-ce que quelqu'un sait un travail autour qui vous permet d'ajouter des fichiers PNG 32bit avec un canal Alpha à un ImageList et conserver les pixels transparents et éviter l'effet de halo/bug?

Merci.

Répondre

10

Je ne pense pas que ce soit un bug. La profondeur de couleur ImageList doit être définie sur 32 bits et vous devez utiliser des styles visuels. Si les styles visuels de l'application sont activés, WinForms utilise la version 6.0 des contrôles communs Windows, qui prend en charge la transparence alpha. Dans le cas contraire, il utilisera la version précédente qui ne prend pas en charge la transparence alpha, et rendra incorrectement les images ARGB avec un halo bleu. Si vous avez besoin d'une solution de contournement, vous pouvez essayer de créer de nouvelles bitmaps de la même taille, en les remplissant avec la BackColor de ListView, en créant un objet Graphics sur le bitmap et en dessinant votre image ARGB sur le bitmap. Ensuite, vous pouvez insérer ces bitmaps pré-blened dans l'ImageList. Si vous faites cela, cependant, la sélection aura l'air drôle sur l'icône dans le ListView. Une autre solution consiste à accéder directement aux données bitmap (à l'aide de LockBits()) et à mélanger manuellement tous les pixels semi-transparents, ce qui permet de rendre les images correctement et de les rendre sensiblement identiques à celles qui sont sélectionnées. .

Questions connexes