我使用TextRenderer.DrawText
方法将文本(使用Color.White
)渲染到背景色为纯白色(FillRectangle
)的位图上。
我然后TransparentBlt
将此位图放到包含彩色背景图片的内存DC上,使用Color.White And &HFFFFFF
作为透明颜色的RGB值(crTransparent
参数),如下所示:
TransparentBlt(hDestMemDc, 0, 0, iTextWidth, iTextHeight, hTextMemDc, 0, 0, iTextWidth, iTextHeight, Color.White.ToArgb() And &HFFFFFF)
{然后BitBlt
将合并的图片放到我控件的表面上,但那不太相关}
虽然呈现的文字清晰明了,但其TransparentBlt
结果 NOT 清晰。
这里是文本的快照,在白色背景上呈现(这是图像,而不是键入的文本):
这是在彩色背景上对上面的图像进行Trans-Blitting的结果:
请注意白色(待透明)点仍围绕红色文字。
此外,请注意绘制在图像左侧的白色垂直线,以及在右上角绘制的类似的较短水平线。
我正在使用VB.NET 2005(a.k.a VB8)。非常感谢您的建议。
答案 0 :(得分:2)
文本消除锯齿/ ClearType意味着并非所有文本都以相同的颜色呈现。文本的外部像素与它们被绘制的背景颜色混合,这具有平滑边缘的效果。因此,您无法在一种背景颜色上渲染文本,将其剪裁出来,并期望它在另一种背景下看起来很好。
您可以在渲染文本时禁用消除锯齿,但结果也不会那么好。
相反,您应该在内存中制作最终目标位图的副本,在其上渲染文本,然后再将其重新显示回屏幕。