gpt4 book ai didi

c++ - 带有 alpha 混合图标的工具栏在一个 WinXP 安装中无法正确显示

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:44:33 26 4
gpt4 key购买 nike

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

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

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

我以前从未见过这样的行为,显然用户在使用其他应用程序时也没有遇到过这个问题。在 WinXP 的工具栏上使用 alpha 混合图像时,有什么我必须牢记的吗?

创建图片列表images的相关代码可见here (32 位屏幕模式的代码在底部)和 there (特别是 PNG::Bitmap::ToDIB)。

最佳答案

我有一段时间没有这样做了,但我相信您需要创建一个 32-bpp 的 DIBSECTION 而不是一个兼容的位图来传递到工具栏,否则 alpha channel 可能会丢失——即使在具有32-bpp 显示。

关于c++ - 带有 alpha 混合图标的工具栏在一个 WinXP 安装中无法正确显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23529471/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com