在WinXP安装中,带有alpha混合图标的工具栏不能正确显示

Toolbar with alpha-blended icons not displaying properly on one WinXP installation

本文关键字:工具栏 不能 显示 图标 混合 安装 WinXP alpha 带有      更新时间:2023-10-16

我,或者更确切地说是我的一个用户,有一个非常奇怪的问题,在他的Windows XP安装中,alpha混合图标不能正确显示。通常,在XP和更新的系统中,混合的图标应该不是问题,但是这个图标真的让我很困惑。

我有一个MFC CToolBar,所以几乎是一个正常的WinAPI工具栏,我用CImageList(所以基本上是一个正常的WinAPI图像列表)喂养它。屏幕模式有回退代码<32位或更早的操作系统,它读取我的位图,具有8位透明度,并将其减少到预乘的1位透明度。在XP上,使用32位深度(由用户确认他使用了这些设置,并且由于回退代码,图标实际上在16位深度下正确显示),我使用ILC_COLOR32标志创建图像列表,如MSDN中所示。此外,输入图像列表的位图是用CreateCompatibleBitmap (bitcount = 32, planes = 1)创建的。

到目前为止,在我个人测试的所有系统上,这个工作都是预期的,也就是说,我在工具栏上得到了不错的alpha混合32位图标。但是,在用户的XP安装中,它看起来是这样的:http://bugs.openmpt.org/file_download.php?file_id=102&type=bug这是完全忽略alpha通道时图标的样子(您可以通过一些通常不可见的错误像素来判断,因为alpha通道是完全透明的)。因此,尽管是在XP上,尽管使用32位屏幕模式,尽管使用ILC_COLOR32, alpha通道被完全忽略。

我以前从未见过这样的行为,显然用户在使用其他应用程序时不会遇到这个问题。在WinXP的工具栏上使用alpha混合图像时,我是否错过了什么,我必须记住?

创建图像列表图像的相关代码可以在这里找到(32位屏幕模式的代码在底部)和那里(特别是PNG::Bitmap::ToDIB)。

我有一段时间没有这样做了,但我认为您需要创建一个32-bpp的DIBSECTION而不是一个兼容的位图来传递到工具栏中,否则alpha通道可能会丢失——即使在具有32-bpp显示器的系统上也是如此。