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

时间:2009-03-06 01:13:49

标签: .net winforms

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

例如:

alt text
(来源:wordpress.com

有没有人知道可以让你将带有Alpha通道的32位PNG添加到ImageList并保留透明像素并避免光环效应/ bug?

感谢。

1 个答案:

答案 0 :(得分:11)

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

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

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

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