代码之家  ›  专栏  ›  技术社区  ›  phimuemue

Windows按钮忽略完全透明图像的alpha通道

  •  0
  • phimuemue  · 技术社区  · 6 年前
    • 我有一个单选按钮,可以显示图像(样式 BS_AUTORADIOBUTTON|BS_PUSHLIKE|BS_BITMAP ).
    • 我通过 CreateDIBSection (使用 BITMAPINFO 具有 BI_RGB )并通过 ppvBits ,以便我可以自由地操纵它们。
    • 我用 BM_SETIMAGE 将按钮的图像设置为我创建的位图。

    到目前为止,我可以设置 RGB和alpha 通过手动操作像素。我测试了半透明(非预乘)alpha值看起来也不错。

    据我所知,一切正常,除非图像中的所有像素都是透明的。在这种情况下,该按钮显然忽略了alpha值,只显示一个矩形,每个像素具有完全不透明的各自颜色。

    found a hint 至少在某些情况下,这些窗口实际上似乎将像素的alpha值都为0的图像解释为完全不透明的图像:

    当窗口管理器看到一个32bpp的位图时,它会看到alpha 频道。如果全部为零,则假定图像为0RGB 格式;否则它假定它是ARGB格式

    1 回复  |  直到 6 年前
        1
  •  1
  •   catnip    6 年前

    这种行为有记录在案吗?

    对!在雷蒙德的岗位上!)通常都是这样,不是吗?

    如果你看页脚 here 你会发现一个评论框。如果您在那里提出您的关注,那么MS很可能会修复他们的文档。见 here 例如,如果他们认为问题严重到可以修复的程度,他们通常会遵循这个过程。