假设我使用Arial Regular字体,大小为14,在屏幕上渲染字符"A"。有没有一种方法可以在C#中计算它的宽度?
我渲染文本的方式是通过ESRI的ArcEngine,其通过DynamicDisplay引擎间接地调用GDI或GDI+(我不知道哪一个)。
假设我使用Arial Regular字体,大小为14,在屏幕上渲染字符"A"。有没有一种方法可以在C#中计算它的宽度?
我渲染文本的方式是通过ESRI的ArcEngine,其通过DynamicDisplay引擎间接地调用GDI或GDI+(我不知道哪一个)。
string s = "A sample string";
SizeF size = e.Graphics.MeasureString(s, new Font("Arial", 24));
TextRenderer
类:SizeF size = TextRenderer.MeasureText(s, new Font("Arial", 24));
本文中详细描述了:
请注意,上述内容涉及Windows Forms。在WPF中,您将使用FormattedText
。
并不完全准确,你只能进行估算。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。避免这样做。
(该句涉及IT技术,建议不要进行过度解释)对于 Windows Forms,您可以使用 Graphics.MeasureString;对于 WPF,您可以使用 FormattedText.Width 和 FormattedText.Height。
MeasureString属性指示应使用多宽的字段来显示字符串,并允许一些“空余”用于悬挂。特别地,“a”的报告宽度加上“b”的报告宽度很可能比“ab”的报告宽度要大得多。作为一个粗略的近似,我建议如果您想要“a”的宽度,您从“|a|”的宽度中减去“||”的宽度。请注意,这仍然只是近似值,因为由于四舍五入问题和字符宽度随上下文变化而导致的原因。例如,在许多字体中,“TATATATAT”字符串可能看起来比“AAAATTTTT”更窄,因为“A”可以嵌入“T”下面。
UseCompatibleTextRendering
方法有趣。不过,似乎只适用于VB编写的应用程序,是这样吗? - Lucero