我正在尝试使用System.Drawing.Graphics类将一段简单的文本写入位图。
使用Graphics.FromImage(MyBitmap)从现有位图创建Graphics类时,正在编写的文本看起来非常粗体(下图中的第一行)。
使用不是使用Graphics.FromImage方法创建的Graphics对象绘制同一段文本时,文本看起来像预期的那样(下图中的第二行)。
使用调试器检查两个不同的Graphics对象,发现它们的属性是相同的,这让我想知道为什么Graphics.DrawText方法会创建两个完全不同的结果。
用于生成上述屏幕截图的代码如下所示:
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对象相同?
答案 0 :(得分:1)
尝试
graphics.TextRenderingHint = TextRenderingHint.AntiAlias;
或任何其他TextRenderingHints