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.
Bueno, funciona. Aunque sería mucho mejor si TreeView simplemente hiciera The Right Thing ™ ... – Thanatos
En realidad, no del todo. Esto - ilTree.ColorDepth = ColorDepth.Depth24Bit; - también es necesario. De lo contrario, parece asumir (incorrectamente) 16 bits. – Thanatos
El valor predeterminado es de 8 bits, pero debe cargar las imágenes con la profundidad de color que haya especificado previamente. – snarf