2012-04-29 100 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; 

(此信息是在註釋中標明響應提供答案,我已經添加了這個作爲答案所以這將是難以錯過另一個可用選項)