HBITMAP可以包含alpha通道信息吗?

时间:2017-08-25 22:07:54

标签: c++ windows winapi gdi+

我注意到ICONINFO包含两个位图。如果我理解正确,hbmMask用于图标的轮廓,同时指定哪个部分应该是透明的,hbmColor用于图标的实际颜色HBITMAP

所以我的问题是,为什么hbmMask是必要的?为什么不把alpha通道的信息放在hbmColor里?它能够将它们组合成一个位图吗?

此外,Gdiplus::Bitmap有一个constructor which accepts a HICON。这是否意味着这个GDI +位图能够处理alpha通道信息?

感谢:)

1 个答案:

答案 0 :(得分: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位图。如果像素格式合适,GDI +位图肯定能够存储alpha通道(如果需要图标PixelFormat32bppARGB)。