Windows按钮忽略Alpha通道以获得完全透明的图像

时间:2018-08-06 11:23:08

标签: winapi button bitmap gdi alpha

  • 我有一个单选按钮,应该显示一个图像(样式BS_AUTORADIOBUTTON|BS_PUSHLIKE|BS_BITMAP)。
  • 我通过CreateDIBSection(使用BITMAPINFOBI_RGB创建位图,并通过ppvBits获取指向原始像素的指针,以便可以操纵它们自由地
  • 我使用BM_SETIMAGE将按钮的图像设置为我创建的位图。

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

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

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

  

当窗口管理器看到32bpp位图时,它将查看alpha   渠道。如果全为零,则假定图像为0RGB   格式;否则将假定它为ARGB格式

此行为记录在某处吗?

1 个答案:

答案 0 :(得分:1)

  

此行为记录在某处吗?

是的!在雷蒙德的帖子中! :)通常就是这样,不是吗?

如果您查看页面here的底部,则会看到一个注释框。如果您对此提出疑问,则MS很可能会修复其文档。如果他们认为问题严重到可以解决,请参见here,以获取他们通常遵循的流程示例。