BMP透明色键无法正确显示

时间:2017-09-13 13:14:04

标签: c++ image bitmap splash-screen

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

我有一张PNG图像。

Transparent PNG

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

Image Green BG

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

enter image description here

我留下了一个文件: PowerUp.bmp

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

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

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

Splash Result

如何解决此问题,使其看起来与透明的原始PNG文件完全相同?

1 个答案:

答案 0 :(得分:0)

我认为问题在于原始png图像具有透明部分(眼镜边框不是严格不透明但更像是平滑过渡到透明),这是常见的情况。因此,在上面的图像上具有绝对的绿色背景,导致绿色在眼镜边​​界和其他图像周围稍微改变。它不是长寿(50,200,25),可能是(51,201,25),不再被CSplash删除。

你需要做的是保存原始PNG的透明格式,其中alpha通道只有1位(0或1,透明或不透明) - 因此转换将丢失,重新打开,并再次执行绿色背景技巧。