在 MFC 应用程序中。
我正在使用 FromFile 将带有 alpha 通道位的 32 位 PNG 文件加载到 Gdiplus::Bitmap 中。
然后我使用 Bitmap::GetHBitmap 从 Gdiplus::Bitmap 检索 HBITMAP。
我使用该句柄将位图添加到图像列表。
我使用该图像列表将工具栏按钮添加到工具栏。
但是,由于某些奇怪的原因,图像没有按预期使用 Alpha 通道。它不是使用 alpha 通道来确定透明度,而是使用 alpha 通道的组合,以及像素颜色与白色 (0x??FFFFFF) 的接近程度来计算透明度。因此,具有逐渐透明的白色像素的图像根本不会显示,但具有逐渐透明的黑色像素的图像可以正确显示。
后来我编辑了代码以确保我的Bitmap to HBitmap使用透明作为背景颜色,并且imagelist和工具栏中的背景颜色是透明的,并且具有相同的结果。
我还使用 HBITMAP 来获取 CBitmap 并使用 AlphaBlend() 方法预乘位图位以在窗口上绘制,并且绘制正确。
我确保我的图像列表使用的是 32 位图像设置,即 ILC_COLOR32 标志。
所以我知道问题在于如何将图像添加到图像列表或工具栏中,但无法弄清楚如何纠正这个问题。
这一切都是动态完成的,所以我没有遇到人们抱怨 VisualStudio 删除 alpha 通道的问题。