使用MFC工具栏和带有透明度的PNG图像,透明度效果不正确
问题描述:
在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通道相同的问题。
答
问题已解决,这是一些令人难以置信的隐藏代码,将白度转换为透明度。 这超出了我的原因,但你有它。
随时关闭问题。
当您创建图像列表时,您是否指定了`ILC_COLOR32`标志? – 2011-01-24 21:15:54