确定.NET中渲染字符的宽度

让我说我用Arial Regular中的14号字体将字符“A”渲染到屏幕上。 C#中有没有办法计算它的宽度是多少?


感谢到目前为止的所有答案。 我正在渲染文本的方式是通过ESRI的ArcEngine,它通过DynamicDisplay引擎调用GDI或GDI +(我不知道哪一个)。

这取决于正在使用的渲染引擎。 .NET可能使用GDI或GDI +。 可以通过相应地设置UseCompatibleTextRendering属性或调用Application.SetCompatibleTextRenderingDefault方法来完成切换。

使用GDI +时,您应该使用MeasureString

 string s = "A sample string"; SizeF size = e.Graphics.MeasureString(s, new Font("Arial", 24)); 

使用GDI(即本机Win32渲染)时,您应该使用TextRenderer类:

 SizeF size = TextRenderer.MeasureText(s, new Font("Arial", 24)); 

本文描述了更多细节:

文本渲染:在Windows窗体控件中使用复杂脚本构建适用于全球的应用程序

请注意,上面谈到的是Windows Forms。 在WPF中,您将使用FormattedText

这是一篇关于确定字体指标的MSDN文章。 您可以使用Graphics.MeasureString进行测量。

你没有说你如何“渲染”它,但如果你有一个字符串,你也可以使用MeasureString 。

Graphics.MeasureString将为您提供当前图形单元的大小。

不是真的,你只能做一个估计。 TrueType提示,字距调整和字形悬垂使得单个字符的测量几乎不可能。 一些代码:

  public float GetAWidth() { using (var font = new Font("Arial", 14)) { SizeF size = TextRenderer.MeasureText(new string('A', 100), font); return size.Width / 100; } } 

在我的机器上返回13.1。 避免这样做。

对于Windows窗体,您使用Graphics.MeasureString ,对于WPF,您使用FormattedText.Width和FormattedText.Height 。

MeasureString属性指示一个字段应该用于显示字符串的宽度,允许一些“slop”用于悬垂。 特别是,报告的“a”宽度加上报告的“b”宽度往往比报告的“ab”宽度大得多。 作为粗略的近似,我建议如果你想要“a”的宽度,你减去“||”的宽度 从“| a |”的宽度。 请注意,这仍然只是近似值,这既是因为舍入问题,也是因为字符宽度因上下文而异。 例如,在许多字体中,字符串“TATATATAT”可能看起来比“AAAATTTTT”窄,因为A可以位于T的下面。