【问题标题】:Workaround for the ImageList transparency bug?ImageList 透明度错误的解决方法?
【发布时间】:2010-10-11 16:06:13
【问题描述】:

如果您将 PNG 图像添加到 ImageList 控件并在 Windows 窗体 (.Net 2.) 应用程序中将该 ImageList 与 ListView 或 TreeView 一起使用,则 ListView 中显示的图标周围会有一个蓝色“光环”。

例如:


(来源:wordpress.com

有没有人知道一种解决方法,允许您将带有 Alpha 通道的 32 位 PNG 添加到 ImageList 并保留透明像素并避免光晕效果/错误?

谢谢。

【问题讨论】:

    标签: .net winforms


    【解决方案1】:

    我不认为这是一个错误。您应该将 ImageList 颜色深度设置为 32 位,并且您需要使用视觉样式。

    如果应用程序启用了视觉样式,WinForms 将使用支持 Alpha 透明度的 Windows 通用控件 6.0 版。否则它将使用不支持 alpha-transparency 的旧版本,并错误地渲染带有蓝色光晕的 ARGB 图像。

    如果您需要解决方法,您可以尝试创建相同大小的新位图,用 ListView 的 BackColor 填充它们,在位图上创建一个 Graphics 对象,然后将 ARGB 图像绘制到位图上。然后您可以将这些预混合位图插入到 ImageList 中。但是,如果您这样做,则列表视图中的图标上的选择看起来很有趣。

    另一种解决方法是直接访问位图数据(使用 LockBits())并手动混合任何半透明像素,这将导致图像正确渲染,并且看起来几乎与选择时应有的方式相同。

    【讨论】:

      猜你喜欢
      • 2011-01-25
      • 2010-10-12
      • 1970-01-01
      • 1970-01-01
      • 2017-01-17
      • 2013-08-30
      • 1970-01-01
      • 2015-03-13
      • 2011-10-26
      相关资源
      最近更新 更多