在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通道的问题。
答案 0 :(得分:0)
问题已解决,这是一些令人难以置信的隐藏代码,它将白度转换为透明度。 这超出了我的原因,但你有它。
随时关闭问题。