确定.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的下面。