2011-01-24 109 views
0

在MFC應用程序中。使用MFC工具欄和帶有透明度的PNG圖像,透明度效果不正確

我正在使用FromFile將帶有alpha通道位的32位PNG文件加載到Gdiplus :: Bitmap中。

然後,我使用Bitmap :: GetHBitmap從Gdiplus :: Bitmap中檢索HBITMAP。

我使用該句柄將Bitmap添加到圖像列表。

我使用該圖像列表將工具欄按鈕添加到工具欄。

但是,由於某些奇怪的原因,圖像沒有按預期使用alpha通道。它不是使用alpha通道來確定透明度,而是使用alpha通道的組合,以及像素的顏色如何接近白色(0x?FFFFFF)來計算透明度。因此,具有逐漸透明的白色像素的圖像根本不會顯示,但具有逐漸透明的黑色像素的圖像正確顯示。

後來我編輯的代碼,以確保我的位圖HBITMAP使用透明作爲背景顏色,並在圖像列表背景顏色和工具欄是透明的,並且有相同的結果。

我也用的HBITMAP獲得的CBitmap和使用的AlphaBlend()方法來繪製一個窗口預乘的bitmapbits,並由此得出正確。

我確定我的圖像列表正在使用32位圖像設置ILC_COLOR32標誌。

所以我知道問題出在圖像是如何加入到無論是圖像列表或工具欄,但無法弄清楚如何糾正。

這一切動態的,所以我並沒有人們都在抱怨VisualStudio中刪除Alpha通道相同的問題。

+0

當您創建圖像列表時,您是否指定了`ILC_COLOR32`標誌? – 2011-01-24 21:15:54

回答

0

問題已解決,這是一些令人難以置信的隱藏代碼,將白度轉換爲透明度。 這超出了我的原因,但你有它。

隨時關閉問題。