2017-08-25 42 views
1

我注意到ICONINFO包含兩個位圖。如果我的理解是正確的,hbmMask是圖標的輪廓,它同時指定哪個部分應該是透明的,而hbmColor是用於圖標的實際顏色HBITMAPHBITMAP可以包含alpha通道信息嗎?

所以我的問題是,爲什麼hbmMask有必要嗎?爲什麼不把alpha通道的信息放入hbmColor?它能夠將它們組合成單個位圖嗎?

此外,Gdiplus::Bitmapconstructor which accepts a HICON。這是否意味着此GDI +位圖能夠處理Alpha通道信息?

謝謝:)

+1

你在問錯誤的問題。是的,位圖可以存儲Alpha通道。然而,除了'AlphaBlend'(可能還有其他一些),GDI並不尊重alpha通道。本質上,位圖支持alpha通道,但API不支持。除此之外,[圖標文件可以存儲具有Alpha通道的PNG圖像](https://blogs.msdn.microsoft.com/oldnewthing/20101022-00/?p=12473),因此不需要遮罩。 – IInspectable

+1

@IInspectable問題標籤爲GDI +,它實際上尊重alpha通道。另外PNG格式不需要圖標文件來支持Alpha通道。圖標中的任何32 bpp圖像都可以有一個alpha通道。 PNG僅用於可選壓縮。 – zett42

+0

@ zett42:問題是詢問'ICONINFO','HBITMAP'和'HICON'。這些是Windows API中的數據類型,而不是GDI +。雖然您可以將32bpp位圖轉儲爲圖標文件,但[仍然需要添加掩碼](https://blogs.msdn.microsoft.com/oldnewthing/20101021-00/?p=12483/),即使你正在使用alpha通道。這對於圖標文件中沒有蒙版的PNG圖標是不同的。 – IInspectable

回答

2

爲什麼hbmMask是必要的嗎?爲什麼不把alpha通道的 信息放入hbmColor中?

alpha通道僅適用於32 bpp位圖(8位alpha通道,每個8位紅色,綠色和藍色通道)。帶有1到8個bpp位圖的圖標因此必須與hbmMask位圖中的顏色位圖分開存儲透明度信息。

實際上,即使是32位的bpp位圖也有一個alpha通道,are required to include the hbmMaskunless the PNG format is used。在後一種情況下,蒙版是從Alpha通道自動導出的。

此外,Gdiplus :: Bitmap有一個接受HICON的構造函數。 這是否意味着此GDI +位圖能夠處理alpha通道 信息?

由於文檔沒有聲明,否則,你是安全的假設,構造一個32 BPP HICON轉換成32 BPP位圖。如果像素格式合適(當需要圖標PixelFormat32bppARGB時),GDI +位圖肯定能夠存儲Alpha通道。

+0

你碰巧有一個設置'HBITMAP'中的alpha信息的例子嗎? – hackjutsu

+0

@hackjutsu一旦你有一個帶有alpha通道的GDI +位圖,你可以調用'Gdiplus :: Graphics * g = Gdiplus :: Graphics :: FromImage(&bitmap);'然後使用'Graphics'方法來操縱alpha通道。 – zett42

相關問題