0

在 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 通道的问题。

4

1 回答 1

0

问题已解决,是一些令人难以置信的隐藏代码将白度转换为透明度。这超出了我的理解,但你有它。

随时关闭问题。

于 2011-02-18T16:13:39.737 回答