用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)。
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