BMP透明色键显示不正确

BMP transparent color key not displaying correctly

我正在使用名为 CSplash 的 C++ class,它用于在屏幕中央显示启动画面 window。它旨在仅加载位图文件类型。允许RGB透明色键显示透明背景的BMP


我有一张 PNG 图片。

我在 Photoshop 中打开这张图片并添加了背景色 (50, 200, 25) 作为透明键。

然后我将此图像保存为项目中的位图文件。

我剩下一个文件:PowerUp.bmp

在我的 C++ 代码中,我导入了上面提到的 class,在 WM_NCCREATE 中,我有以下代码:

CSplash splash = CSplash("PowerUp.bmp", RGB(50, 200, 25));
splash.WindowProc(hWnd, uMsg, wParam, lParam);
splash.ShowSplash();
splash.DoLoop();

当我 运行 我的程序时,初始图像以透明背景显示,但不是预期的那样。结果在图标周围留下了一些透明颜色。

如何解决这个问题,使它看起来与透明的原始 PNG 文件完全一样?

我看到的问题是你的原始png图像有透明部分(眼镜边框不是严格不透明的,而是更像是平滑过渡到透明的),这是一个常见的情况。因此,在上面这张图片上有绝对绿色的背景会导致眼镜边框和其他图片周围的绿色发生一点变化。它不再是 (50, 200, 25),它可能是 (51, 201, 25) 并且不再被 CSplash 删除。

您需要做的是将原始 PNG 保存为透明格式,其中 alpha 通道只有 1 位(0 或 1,透明或不透明)- 因此转换将丢失,重新打开它,然后做绿色背景再次欺骗。