0

我在 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));

以前我创建了图片框,并从中做了图形对象。问题是“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)。

4

2 回答 2

1

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

于 2013-01-09T22:45:50.003 回答
0

如果你的“字符串”有一个降序字母,比如 ag 或 aj,会发生什么?每种字体都允许字母的降序部分,因此您可能需要通过查看字体的指标来考虑这一点

http://msdn.microsoft.com/en-us/library/xwf9s90b.aspx

于 2013-01-09T19:23:06.860 回答