2011-01-24 108 views
0

在MFC应用程序中。使用MFC工具栏和带有透明度的PNG图像,透明度效果不正确

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

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

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

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

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

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

我也用的HBITMAP获得的CBitmap和使用的AlphaBlend()方法来绘制一个窗口预乘的bitmapbits,并由此得出正确。

我确定我的图像列表正在使用32位图像设置ILC_COLOR32标志。

所以我知道问题出在图像是如何加入到无论是图像列表或工具栏,但无法弄清楚如何纠正。

这一切动态的,所以我并没有人们都在抱怨VisualStudio中删除Alpha通道相同的问题。

+0

当您创建图像列表时,您是否指定了`ILC_COLOR32`标志? – 2011-01-24 21:15:54

回答

0

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

随时关闭问题。