【问题标题】:Using a MFC toolbar and a PNG image with transparency, incorrect transparency effects [closed]使用 MFC 工具栏和具有透明度的 PNG 图像,不正确的透明度效果 [关闭]
【发布时间】:2011-06-14 17:57:22
【问题描述】:

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

【问题讨论】:

  • 创建镜像列表时,是否指定ILC_COLOR32标志?
  • 你为什么花这么多时间描述你的代码而不是发布它?如果我可以阅读源代码,那么调试问题就会容易得多。

标签: mfc bitmap gdi+ gdi imagelist


【解决方案1】:

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

随时结束问题。

【讨论】:

    猜你喜欢
    • 2010-09-07
    • 2012-03-06
    • 2010-12-22
    • 2012-08-28
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 2020-10-17
    • 2012-01-29
    相关资源
    最近更新 更多