Windows 按钮忽略全透明图像的 alpha 通道
Windows button ignores alpha channel for fully transparent image
- 我有一个应该显示图像的单选按钮(样式
BS_AUTORADIOBUTTON|BS_PUSHLIKE|BS_BITMAP
)。
- 我通过
CreateDIBSection
创建位图(使用 BITMAPINFO
和 BI_RGB
)并通过 ppvBits
获取指向原始像素的指针,这样我就可以自由操纵它们。
- 我使用
BM_SETIMAGE
将按钮的图像设置为我创建的位图。
到目前为止,我可以通过手动操作像素来设置 RGB 和 alpha。我测试过,即使是半透明(非预乘)alpha 值看起来也不错。
据我所知,一切正常,除非图像中的所有像素都是透明的。在这种情况下,按钮显然会忽略 alpha 值,只是显示一个矩形,每个像素都具有完全不透明的相应颜色。
我 found a hint Windows - 至少在某些情况下 - 实际上似乎将像素的 alpha 值全为 0 的图像解释为完全不透明的图像:
When the window manager sees a 32bpp bitmap, it looks at the alpha
channel. If it's all zeroes, then it assumes that the image is in 0RGB
format; otherwise it assumes it is in ARGB format
是否在某处记录了此行为?
- 我有一个应该显示图像的单选按钮(样式
BS_AUTORADIOBUTTON|BS_PUSHLIKE|BS_BITMAP
)。 - 我通过
CreateDIBSection
创建位图(使用BITMAPINFO
和BI_RGB
)并通过ppvBits
获取指向原始像素的指针,这样我就可以自由操纵它们。 - 我使用
BM_SETIMAGE
将按钮的图像设置为我创建的位图。
到目前为止,我可以通过手动操作像素来设置 RGB 和 alpha。我测试过,即使是半透明(非预乘)alpha 值看起来也不错。
据我所知,一切正常,除非图像中的所有像素都是透明的。在这种情况下,按钮显然会忽略 alpha 值,只是显示一个矩形,每个像素都具有完全不透明的相应颜色。
我 found a hint Windows - 至少在某些情况下 - 实际上似乎将像素的 alpha 值全为 0 的图像解释为完全不透明的图像:
When the window manager sees a 32bpp bitmap, it looks at the alpha channel. If it's all zeroes, then it assumes that the image is in 0RGB format; otherwise it assumes it is in ARGB format
是否在某处记录了此行为?