我注意到ICONINFO
包含两个位图。如果我理解正确,hbmMask
用于图标的轮廓,同时指定哪个部分应该是透明的,hbmColor
用于图标的实际颜色HBITMAP
。
所以我的问题是,为什么hbmMask
是必要的?为什么不把alpha通道的信息放在hbmColor
里?它能够将它们组合成一个位图吗?
此外,Gdiplus::Bitmap
有一个constructor which accepts a HICON。这是否意味着这个GDI +位图能够处理alpha通道信息?
感谢:)
答案 0 :(得分:2)
为什么需要hbmMask?为什么不把alpha通道放进去 hbmColor里面的信息?
Alpha通道仅适用于32 bpp位图(8位alpha通道,每位8位红色,绿色和蓝色通道)。因此,具有1到8 bpp位图的图标必须与hbmMask
位图中的颜色位图分开存储透明度信息。
实际上,即使是32 bpp位图也有alpha通道,are required to include the hbmMask
,unless the PNG format is used。在后一种情况下,掩码是从alpha通道自动导出的。
此外,Gdiplus :: Bitmap有一个接受HICON的构造函数。 这是否意味着此GDI +位图能够处理alpha通道 信息?
由于文档没有另外说明,您可以安全地假设构造函数将32 bpp HICON
转换为32 bpp位图。如果像素格式合适,GDI +位图肯定能够存储alpha通道(如果需要图标PixelFormat32bppARGB
)。