让我说我用Arial Regular中的14号字体将字符“A”渲染到屏幕上。 C#中有没有办法计算它的宽度是多少?
感谢目前为止的所有答案。我渲染文本的方式是通过ESRI的ArcEngine,它通过DynamicDisplay引擎调用GDI或GDI +(我不知道哪一个)。
答案 0 :(得分:11)
这取决于正在使用的渲染引擎。 .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));
本文介绍了更多详细信息:
<强> Text Rendering: Build World-Ready Apps Using Complex Scripts In Windows Forms Controls 强>
请注意,上面谈到的是Windows Forms。在WPF中,您将使用FormattedText
答案 1 :(得分:4)
这是关于determining font metrics的MSDN文章。您可以使用Graphics.MeasureString进行测量。
答案 2 :(得分:4)
你没有说你如何“渲染”它,但如果你有一个字符串,你也可以使用MeasureString。
答案 3 :(得分:3)
Graphics.MeasureString可以获得当前图形单元的大小。
答案 4 :(得分:3)
不是,你只能估计一下。 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。避免这样做。
答案 5 :(得分:2)
对于Windows表单,您使用Graphics.MeasureString,对于WPF,您使用FormattedText.Width和FormattedText.Height。
答案 6 :(得分:2)
MeasureString属性指示一个字段应该用于显示字符串的宽度,允许一些“slop”用于悬垂。特别是,报告的“a”宽度加上报告的“b”宽度往往比报告的“ab”宽度大得多。作为一个粗略的近似,我建议如果你想要“a”的宽度,你减去“||”的宽度从“| a |”的宽度。请注意,这仍然只是近似值,这既是因为舍入问题,也是因为字符宽度因上下文而异。例如,在许多字体中,字符串“TATATATAT”可能看起来比“AAAATTTTT”窄,因为A可以位于T的下面。