使用MFC工具栏和具有透明度的PNG图像,不正确的透明效果

时间:2011-01-24 19:33:40

标签: mfc bitmap gdi+ gdi imagelist

在MFC应用程序中。

我正在使用FromFile将带有alpha通道位的32位PNG文件加载到Gdiplus :: Bitmap中。

然后我使用Bitmap :: GetHBitmap从Gdiplus :: Bitmap中检索HBITMAP。

我使用该句柄将Bitmap添加到图像列表。

我使用该图像列表将工具栏按钮添加到工具栏。

但是,由于某些奇怪的原因,图像不会按预期使用Alpha通道。它不使用alpha通道来确定透明度,而是使用Alpha通道的组合,以及像素的颜色与白色(0x ?? FFFFFF)的接近程度来计算透明度。因此,具有逐渐透明的白色像素的图像根本不显示,但具有逐渐透明的黑色像素的图像显示正确。

我后来编辑了代码以确保我的HBitmap的Bitmap使用透明作为背景颜色,并且图像列表和工具栏中的背景颜色是透明的,并且具有相同的结果。

我还使用HBITMAP来获取CBitmap并使用AlphaBlend()方法在位图上预先绘制一个窗口,然后正确绘制。

我已确保我的图片列表使用的是32位图像设置,即ILC_COLOR32标记。

所以我知道问题在于如何将图像添加到图像列表或工具栏中,但无法弄清楚如何纠正这一点。

这一切都是动态完成的,所以我没有遇到人们抱怨VisualStudio删除alpha通道的问题。

1 个答案:

答案 0 :(得分:0)

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

随时关闭问题。