【问题标题】:Preventing color bleeding with StateImageList on TreeView在 TreeView 上使用 StateImageList 防止颜色渗色
【发布时间】:2009-12-08 08:55:10
【问题描述】:

在将 StateImageList 与 Windows 窗体 TreeView 一起使用时,是否有人可以解决颜色渗色问题?

使用相同的 ImageList 并分配给 TreeView 的 ImageList 属性,可以正确呈现,如下图所示。

状态图像在左侧,正常图像在右侧。所有图像都来自同一个 ImageList 实例。

更新:

我将图像转换为 16 色索引调色板。好像也不喜欢这样。它稍微好一点,但仍然不能接受。

【问题讨论】:

    标签: c# .net winforms treeview


    【解决方案1】:

    .StateImageList 的 .ColorDepth 属性的文档说明:

    在 .NET Framework 1.1 版或 稍后,默认为 Depth8Bit。

    看起来这个“默认”是不允许更改的。好吧,你可以改变它,但它没有任何好处。

    看Reflector中的代码,当设置TreeView的StateImageList属性时,内部会创建一个新的图片列表。此图像列表使用颜色深度的默认值。而且由于您在创建图像列表后无法更改颜色深度,因此这几乎可以保证 StateImageList 只能以默认颜色深度显示。

    编辑: 我想我已经弄清楚这里发生了什么。我一直在玩各种颜色深度的图像,比如你的阴影圆圈。基本上,当我拍摄一张像样的图像并将其转换为 4 位 颜色时,我得到的结果看起来与 StateImageList 中的图像完全一样。尽管文档中有“8 位”注释,但 StateImageList 似乎仍在使用 4 位颜色深度(旧的、旧的 16 色标准)作为默认值。

    只有当我在图像列表中使用 4 位图像开始时,图像列表和状态图像列表的显示之间没有变化。

    alt text http://www.freeimagehosting.net/uploads/74873abc94.png

    我使用旧的 Windows 16 调色板为图像列表创建了这个图像。它看起来非常糟糕,但它在 stateimagelist 中并没有改变。

    【讨论】:

    • 听起来不错,谢谢,明天上班试试 :) 也许我可以尝试准备好 4 位的图像。
    • 4 位图像也不能正常工作:( 用另一个屏幕更新了我的问题。
    • 嗯...很好奇。我想可能不同之处在于我使用旧的 16 色 Windows 调色板而不是索引(自适应)16 色调色板制作了 4 位图像。这样做,我的图像在 imagelist 和 stateimagelist 之间看起来是一样的;也就是说,两者都非常糟糕。
    【解决方案2】:

    看起来图像的位深度减少了。

    ImageList 的ColorDepth property 是否设置为Depth24Bit 或更高?

    【讨论】:

    • 不,这不起作用。尝试了所有这些,甚至改变了图像的深度,结果都一样:(
    【解决方案3】:

    在将图像添加到 ImageList 之前,必须将 ColorDepth 属性设置为 Depth24Bit。就我而言,它有所帮助。

    【讨论】:

    • 那不行,请看下面的答案。
    猜你喜欢
    • 1970-01-01
    • 2015-10-16
    • 2014-12-05
    • 1970-01-01
    • 2022-09-27
    • 2016-12-06
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多