C#:使用带有多个图像的.ico文件

时间:2009-06-08 20:49:05

标签: c# .net icons

我正在尝试使用包含两个图标的.ico文件在C#中的TreeView中设置图像:32x32版本和16x16版本。图像正在设置,但.Net正在选择32x32版本,并将其缩小(看起来很糟糕),而不是选择现成的16x16图像。

相关代码:

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位图标中删除颜色。经过仔细检查,我的图标(有三个)是:4bit,4bit,8bit。两个4位图标共享调色板,但8位有不同的调色板。总的来说,图标之间有257种颜色。尽管只有轻微的溢出,.Net将其降低到仅仅 20 的颜色。

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

将ImageList的ImageSize属性设置为新的Size(16,16)