【发布时间】:2013-07-10 20:25:09
【问题描述】:
我正在使用FillRectangle 方法将文本(使用TextRenderer.DrawText)渲染到一个背景为纯白色(Color.White)的位图上。
然后我将TransparentBlt这个Bitmap放到一个包含彩色背景图片的内存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 结果不清晰。
这是文本的快照,呈现在白色背景上(这是一张图片,不是输入文本):
这是在彩色背景上对上面的图像进行 Trans-Blitting 的结果:
请注意白色(待透明)点仍在红色文本周围。
此外,请注意在图像左侧绘制的白色垂直线,以及在右上角绘制的类似较短的水平线。
我正在使用 VB.NET 2005(又名 VB8)。非常感谢您的建议。
【问题讨论】:
-
看起来像字体平滑。你是如何渲染文本的?
-
oGraphics.CompositingQuality = Drawing.Drawing2D.CompositingQuality.HighQuality oGraphics.InterpolationMode = Drawing.Drawing2D.InterpolationMode.HighQualityBicubic oGraphics.SmoothingMode = Drawing.Drawing2D.SmoothingMode.HighQuality oGraphics.TextContrast = 0 oGraphics.TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAlias
-
Dim sRect As Rectangle = New Rectangle(0, 0, m_sTextSize.Width, m_sTextSize.Height)Dim oBrush As Brush = New SolidBrush(const_sTextBackColor)oGraphics.FillRectangle(oBrush, sRect)TextRenderer.DrawText(oGraphics, Me.Text, Me.Font, sRect, Me.ForeColor, const_sTextBackColor, m_eTextFormatFlags)如果确实是这个原因,那么渲染的结果(上图)如何锐利?
标签: .net winapi transparency bitblt bitblit