【问题标题】:C#: Using .ico file with multiple imagesC#:使用带有多个图像的 .ico 文件
【发布时间】:2009-06-08 20:49:04
【问题描述】:

我正在尝试在 C# 中的 TreeView 中设置图像,该图像来自一个包含两个图标的 .ico 文件:一个 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 种颜色。

【问题讨论】:

    标签: c# .net icons


    【解决方案1】:

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

    【讨论】:

    • 嗯,它有效。虽然如果 TreeView 只做 The Right Thing™ 肯定会更好......
    • 其实不完全是。这 -- ilTree.ColorDepth = ColorDepth.Depth24Bit; ——也需要。否则,它似乎(错误地)假设为 16 位。
    • 默认为 8 位,但它应该加载您之前指定的颜色深度的图像。
    【解决方案2】:

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

    【讨论】:

    • 这是 ImageList 的默认大小 - 手动设置它(并且当我添加它时)没有效果。
    • 嗯,这以前对我有用。您是在添加图像之前还是之后设置它?没想到这是默认设置。
    猜你喜欢
    • 2012-02-03
    • 2012-03-19
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-11
    • 2014-04-12
    相关资源
    最近更新 更多