2012-04-29 72 views
6

我使用ImageList代替TreeViewListView。我首先将图像质量设置为32位,然后添加半透明的图像。质量看起来不错,但经过​​几分钟的编码,编译和执行应用程序,质量看起来很糟糕。ImageList:32位图像丢失质量

见截图: enter image description here

使用的属性

ColorDepth: Depth32Bit 
ImageSize: 16; 16 
TransparentColor: Transparent 

有哪些是半透明的,但不是完全透明的像素背后的黑色像素。

重新添加所有图像可恢复原始质量,但几分钟后,它看起来像在屏幕截图的右侧。

+0

哪个版本的Visual Studio?我敢打赌,如果你在运行时加载图像列表,它可以正常工作。可能是在设计时存储/加载图像列表状态的VS代码中的一个错误。 – 2012-04-29 14:23:33

+0

这是VS2010旗舰版。我也首先想到在运行时加载它们,但这不是它应该的方式。任何其他想法? – bytecode77 2012-04-29 15:03:26

+0

在运行时从资源加载正是我要做的。然后我可以选择与字体缩放相匹配的大小。 – 2012-04-29 15:09:55

回答

8

当图像存储为ImageStream(VS Designer的默认行为)时,看起来像alpha通道数据会丢失。 因此,如果您可以停止使用Designer在ImageList中设置图像,则可以使用半透明图像,最大为ColorDepth.Depth32Bit。 这是非常不方便,但它的工作。

因此,你可以把你的图片到Resources.resx文件,并将它们添加到代码中的适当位置。例如在你UserControl/Form构造函数,调用InitializeComponent()通过这样的代码之后:

_imageList.Images.Add(Resources.Image32); 
    _imageList.Images.SetKeyName(0, "Image32"); 
    _myButton.Image = 0; 

(此信息是在注释中标明响应提供答案,我已经添加了这个作为答案所以这将是难以错过另一个可用选项)