ClearType会破坏透明度

时间:2014-05-11 00:44:29

标签: c++ winapi bitmap transparency cleartype

我有一个位图需要用另一个位图的一部分替换背景。一切正常,直到我在 WindowsXP 上启用 ClearFont

为了更好地解释我的问题,让我们将第一个位图标记为bmpDestination,将第二个位图标记为bmpSource

以下是bmpSource的样子:

enter image description here

以下是bmpDestination的样子:

enter image description here

ClearType 关闭时,以下是正确结果的显示方式:

enter image description here

ClearType 打开时,这是他们合并的错误结果:

enter image description here

ClearType 会改变文本背景颜色的某些部分,因此它们不再是白色(RGB( 255, 255, 255 )),而是白色和文本颜色的组合。

我使用BitBlt()和单色位图来创建遮罩,并模拟透明度。我也试过使用TransparentBlt(),但结果相同。

如果启用了ClearType,我如何合并bmpSourcebmpDestination,这样我可以像上面一样创建正确的结果?

感谢您的帮助。

最好的问候。

1 个答案:

答案 0 :(得分:2)

在白色背景上渲染带有黑色文本的树视图。使用具有灰度抗锯齿功能的字体。不要使用ClearType消除锯齿。我非常确定你可以使用fdwQuality CreateFont参数之一来实现这一目标,但我不会发誓。

每个像素在白色和黑色之间将具有灰色阴影。您可以将其解释为透明度。白色是完全透明的;黑色是完全不透明的。使用此信息创建具有透明度的位图。在多色背景上渲染此透明位图。