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

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

  • https://msdn.microsoft.com/en-us/library/windows/desktop/ms648052(v=vs.85).aspx
  • https://social.msdn.microsoft.com/Forums/vstudio/en-US/490fb15a-61a5-4a5d-a1a0-fed675975293/hbmmask-hbmcolor-in-iconinfo?forum=vcgeneral

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

另外, Gdiplus::Bitmap有一个接受HICON的构造函数 。 这是否意味着这个GDI +位图能够处理Alpha通道信息?

谢谢:)

为什么hbmMask是必要的? 为什么不把alpha通道的信息放在hbmColor中?

Alpha通道仅适用于32 bpp位图(8位alpha通道,每个8位红色,绿色和蓝色通道)。 具有1到8个bpp位图的图标因此必须与hbmMask位图中的颜色位图分开存储透明度信息。

实际上, 除非使用PNG格式 , 否则甚至需要包含hbmMask具有alpha通道的32位bpp位图。 在后一种情况下,掩码是从Alpha通道自动导出的。

另外,Gdiplus :: Bitmap有一个接受HICON的构造函数。 这是否意味着这个GDI +位图能够处理Alpha通道信息?

由于文档没有另外声明,所以您可以安全地假设构造函数将32 bpp HICON转换为32 bpp位图。 如果像素格式合适(如果需要图标PixelFormat32bppARGB ),GDI +位图肯定能够存储Alpha通道。