用GDI+精确地在指定点绘制字符串

本文关键字:绘制 字符串 GDI+ | 更新日期: 2023-09-27 17:51:05

我在c#中绘制字符串有问题

下面是我的代码:
Graphic.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;
Pen pen = new Pen(brush, 2f);
Font font = new Font("Segoue UI", 15);
graphic.DrawString("2", font, brush, new PointF(0f, 0f));

之前我创建了picturebox,并从它做了图形对象。问题是"2"不是在(0;0),而是在(4;5)。事件,如果我关闭AntiAlias仍然在(4;5)。

我通过从(0;0)到(200;0)和从(0;0)到(0;200)画两条线来检查它,并根据它们计算出绘制字符串时的错误。

知道为什么吗?我需要在点上绘制字符串

//编辑我也试着这样设置字体:

Font font = new Font("Microsoft Sans Serif", 10);

在(0,0)中绘制"2",则"2"的实际位置为(3,3)。与绘制"1"的错误相同(3;3)。

用GDI+精确地在指定点绘制字符串

Graphics.DrawString自动填充用于绘制字符串的框。原因是它的目的是为控件绘制标签文本等,因此是"现成的",所以文本周围有填充。

微软最终意识到,当需要更精确的文本绘制时,这种方法并不是最好的。文本编辑器等),并为此开发了TextRendered类,该类封装GDI而不是GDI+,并返回"旧的"更准确的字符串绘制。

试题:

TextRenderer.DrawText(e.Graphics, "2", font, new Point(0, 0), brush);

您可能会遇到这样的填充,但这里您可以更可靠地补偿它。查看下面的链接,看看你可以使用哪些标志的方法。

注意:如果你需要测量文本,使用TextRenderer.MeasureText()是很重要的。

有关详细信息,请访问:
http://msdn.microsoft.com/en-us/library/system.windows.forms.textrenderer.aspx

标记:
http://msdn.microsoft.com/en-us/library/w3cdh3zw.aspx

如果你的"string"有一个降序字母,比如g或j,会发生什么?每种字体都允许字母的降序部分,因此您可能需要通过查看字体的度量

来考虑这一点。http://msdn.microsoft.com/en-us/library/xwf9s90b.aspx