2009-06-08 26 views
7

Estoy tratando de configurar las imágenes en un TreeView en C#, desde un archivo .ico que contiene dos iconos: una versión de 32x32 y una de 16x16. Las imágenes se están configurando, pero .Net elige la versión de 32x32 y la escala (lo que se ve horrible) en lugar de elegir la imagen de 16x16 disponible.C#: Utilizando el archivo .ico con múltiples imágenes

El código relevante:

ilTree.Images.Add(Properties.Resources.group); 
ilTree.Images.Add(Properties.Resources.single); 
ilTree.Images.Add(Properties.Resources.db); 
treeStored.ImageList = ilTree; 

Dónde estoy haciendo mal?


Respuesta:

Hay dos cosas que debe hacer para conseguir que esto funcione. El primero, como se menciona a continuación, es especificar manualmente el tamaño correcto para la lista de imágenes. El segundo es que probablemente también deba especificar la profundidad del color. MSDN indica que:

En .NET Framework versión 1.1 o posterior, el valor predeterminado es Depth8Bit.

... sin embargo, eso no impidió que ImageList eliminara los colores de mi icono de 8 bits. Tras una inspección minuciosa, mis iconos (había tres) fueron: 4 bits, 4 bits, 8 bits. Los dos iconos de 4 bits compartían paletas, sin embargo, el 8bit tenía una diferente. En total, hubo 257 colores entre los iconos. A pesar del ligero desbordamiento, .Net lo redujo a apenas colores.

Respuesta

5

Usted necesita crear un nuevo objeto de iconos. Hay una sobrecarga para el constructor que acepta el objeto Icon original y un tamaño. No sé si el nuevo objeto Icon compartirá el mismo HIcon, pero se dibujará correctamente. Para estar seguro, recomendaría asegurar que ambos estén eliminados.

+0

Bueno, funciona. Aunque sería mucho mejor si TreeView simplemente hiciera The Right Thing ™ ... – Thanatos

+0

En realidad, no del todo. Esto - ilTree.ColorDepth = ColorDepth.Depth24Bit; - también es necesario. De lo contrario, parece asumir (incorrectamente) 16 bits. – Thanatos

+0

El valor predeterminado es de 8 bits, pero debe cargar las imágenes con la profundidad de color que haya especificado previamente. – snarf

1

Conjunto ImageSize la propiedad de la ImageList al nuevo tamaño (16, 16)

+0

Ese es el tamaño predeterminado de la ImageList: configurarlo manualmente (y, cuando lo agregue) no tiene ningún efecto. – Thanatos

+0

hmm, esto ha funcionado previamente para mí. ¿Lo configura antes de agregar las imágenes o después? No me di cuenta de que era el predeterminado. – rein

+0

Intenté agregarlo antes. Después tampoco tiene ningún efecto. – Thanatos

Cuestiones relacionadas