2009-06-08 47 views
7

我试图从包含两个图标的.ico文件在C#中的TreeView中设置图像:32x32版本和16x16版本。图像设置,但。NET选择32x32版本,并缩小(看起来很可怕),而不是选择现成的16x16图像。C#:使用.ico文件与多个图像

相关的代码:

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

我要去哪里错了?


答:

有两件事情你必须做的就是这个工作。第一,如下所述,是手动指定图像列表的正确大小。第二个是你也可能必须指定颜色深度。 MSDN指出:

在.NET Framework 1.1或更高版本中,缺省值为Depth8Bit。

...但是,这并没有阻止ImageList从我的8位图标中去除颜色。经过仔细检查,我的图标(有三个)是:4位,4位,8位。两个4位图标共享调色板,但8位有不同的调色板。图标之间总共有257种颜色。尽管只有轻微的溢出,.Net将其击倒仅仅是颜色。

回答

5

你需要创建一个新的图标对象。接受原始Icon对象和大小的构造函数有一个重载。我不知道新的Icon对象是否会共享相同的HIcon,但它会正确绘制。为了安全起见,我建议确保两者都被处置。

1

设置的ImageList新尺寸的IMAGESIZE财产(16,16)

+0

这是ImageList的默认大小 - 手动设置它会(并且,当我添加它时)没有效果。 – Thanatos 2009-06-08 20:58:14

+0

嗯,这以前为我工作。你在添加图片之前还是之后设置了它?没有意识到这是默认的。 – rein 2009-06-08 21:04:46