2009-12-08 5 views
3

Est-ce que quelqu'un a une solution pour le saignement de couleur lors de l'utilisation d'une StateImageList avec un Windows Forms TreeView?Prévention de la perte de couleur avec StateImageList sur TreeView

L'utilisation de la même ImageList affectée à la propriété ImageList de TreeView permet d'obtenir un rendu correct, comme le montre l'image suivante.

24 bit

Les images état sont à gauche, les images normales sont à droite. Toutes les images proviennent de la même instance ImageList.

Mise à jour:

I a converti les images à 16 palette des couleurs indexées. Il semble que ça n'aime pas ça non plus. C'est un peu mieux, mais encore loin d'être acceptable.

4 bit

Répondre

3

La documentation sur la propriété .ColorDepth des États .StateImageList:

Dans la version .NET Framework 1.1 ou plus tard, la valeur par défaut est Depth8Bit.

Il semble que ce 'défaut' ne puisse pas être modifié. Eh bien, vous pouvez le changer, mais ça ne sert à rien.

En regardant le code dans Reflector, lorsque la propriété StateImageList de TreeView est définie, une nouvelle liste d'images est créée en interne. Cette liste d'images utilise la valeur par défaut pour la profondeur de couleur. Et puisque vous ne pouvez pas changer la profondeur de couleur après avoir créé la liste d'images, cela garantit à peu près que la StateImageList ne peut être affichée qu'à la profondeur de couleur par défaut.

EDIT: Je pense avoir compris ce qui se passe ici. J'ai joué avec des images comme vos cercles ombrés à différentes profondeurs de couleurs. Fondamentalement, quand je prends une image décente et la convertis en couleur 4 bits, j'obtiens des résultats qui ressemblent exactement aux images de la StateImageList. Malgré la note '8 bits' dans la documentation, il semble que la StateImageList utilise toujours la profondeur de couleur 4 bits (l'ancienne, ancienne norme 16 couleurs) comme valeur par défaut.

Ce n'est que lorsque j'utilise des images 4 bits dans la liste d'images, que je n'obtiens aucun changement entre l'affichage de l'imagelist et celui de l'étatimagelist.

alt text http://www.freeimagehosting.net/uploads/74873abc94.png

J'ai créé cette image pour le imagelist en utilisant l'ancienne palette 16 couleurs de Windows. Cela a l'air absolument terrible, mais cela n'a pas changé dans l'étatimagelist.

+0

J'ai essayé aussi des images 8bit sans succès – leppie

+0

Sonne bien, merci, va l'essayer au travail demain :) Peut-être que je peux essayer de préparer les images pour bien paraître à 4 bits. – leppie

+0

4 images binaires ne fonctionnent pas correctement soit :(mis à jour ma question avec un autre screenie. – leppie

0

On dirait que les images sont réduites en profondeur de bit.

La valeur ColorDepth property de la propriété ImageList est-elle définie sur Depth24Bit ou une valeur supérieure?

+0

Non, cela ne fonctionne pas.Je ai essayé tous, même en changeant la profondeur des images, tous le même résultat :( – leppie

0

La propriété ColorDepth doit être définie sur Depth24Bit avant d'ajouter une image à ImageList. Dans mon cas, cela m'a aidé.

+0

C'est un non, voir la réponse ci-dessous. – leppie

Questions connexes