使用Graphics.FromImage时的TextQuality

时间:2014-10-27 07:17:12

标签: c# forms

我正在尝试使用System.Drawing.Graphics类将一段简单的文本写入位图。

使用Graphics.FromImage(MyBitmap)从现有位图创建Graphics类时,正在编写的文本看起来非常粗体(下图中的第一行)。

使用不是使用Graphics.FromImage方法创建的Graphics对象绘制同一段文本时,文本看起来像预期的那样(下图中的第二行)。

使用调试器检查两个不同的Graphics对象,发现它们的属性是相同的,这让我想知道为什么Graphics.DrawText方法会创建两个完全不同的结果。

Difference in formatting

用于生成上述屏幕截图的代码如下所示:

public partial class Form1:Form
{
    public Form1()
    {
        InitializeComponent();
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);

        string                      text            = "1.000";
        Rectangle                   rectangle       = new Rectangle(0, 0, 200, 200);
        System.Drawing.StringFormat stringFormat    = new System.Drawing.StringFormat(System.Drawing.StringFormatFlags.NoWrap);

        using(System.Drawing.Bitmap     bitmap      = new System.Drawing.Bitmap(e.ClipRectangle.Width, e.ClipRectangle.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb))
        using(System.Drawing.Graphics   graphics    = System.Drawing.Graphics.FromImage(bitmap))
        using(System.Drawing.Font       font        = new System.Drawing.Font("Tahoma", 10))
        using(System.Drawing.SolidBrush drawBrush   = new System.Drawing.SolidBrush(System.Drawing.Color.Black))
        {
            // Text looks very bold.
            graphics.DrawString(text, font, drawBrush, rectangle, stringFormat);
            e.Graphics.DrawImage(bitmap, new Point(0, 0));

            // Text looks normal.
            e.Graphics.DrawString(text, font, drawBrush, new Rectangle(0, 20, 200, 200), stringFormat);
        }
    }
}

我试图将非粗体文本写入位图,以便我可以在程序的其他地方使用它。

有人可以解释为什么Graphics.DrawText方法在上面的示例代码中产生两个不同的结果,以及我如何使第一个Graphics对象的文本输出看起来与第二个Graphics对象相同?

1 个答案:

答案 0 :(得分:1)

尝试

graphics.TextRenderingHint = TextRenderingHint.AntiAlias;

或任何其他TextRenderingHints