.net - ImageList 透明度错误的解决方法?

标签 .net winforms

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

例如:

alt text
(来源:wordpress.com)

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

谢谢。

最佳答案

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

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

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

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

关于.net - ImageList 透明度错误的解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/617405/

相关文章:

c# - 需要强制 Windows 窗体应用程序在启动时运行

.net - CheckedListBox.Items 中每个项目的类型是什么?

c# - .net Micro for ARM M3 STM32F103ZD

c# - 处理参数

.net - 编写 .NET 以外的 Windows 客户端应用程序的最佳方法是什么?

c# - 如何在 TreeView 中显示文件夹下的所有文件

c# - 如何在窗口最小化或最大化之前获取 Form.DesktopBounds

vb.net - VB 捕获文本框中的前 4 个字符

c# - System.ObjectDisposeException。处理流编写器的正确方法是什么?

.net - 适用于 Windows Forms 和 WPF 的商业控制套件 : which can be recommended?