Windows 窗体:
因为System.Drawing
有一种方法可以获取字体高度。
Font font = new Font("Arial", 10 , FontStyle.Regular);
float fontHeight = font.GetHeight();
但是您如何获得其他文本指标,例如平均字符宽度?
使用 Graphics.MeasureString 方法
private void MeasureStringMin(PaintEventArgs e)
{
// Set up string.
string measureString = "Measure String";
Font stringFont = new Font("Arial", 16);
// Measure string.
SizeF stringSize = new SizeF();
stringSize = e.Graphics.MeasureString(measureString, stringFont);
// Draw rectangle representing size of string.
e.Graphics.DrawRectangle(new Pen(Color.Red, 1), 0.0F, 0.0F, stringSize.Width, stringSize.Height);
// Draw string to screen.
e.Graphics.DrawString(measureString, stringFont, Brushes.Black, new PointF(0, 0));
}
字体没有严格的平均宽度,因为字距调整可能会产生影响,具体取决于任何给定字母之前和之后的字母。
如果您想在固定宽度的情况下使用非固定大小的字体,您的主要选择是将字符间隔大写“W”字符的宽度。
其他人已经给出了获取指定字符串宽度的示例,但要回答您的问题,要获得可打印字符的真实平均值,您可能需要执行以下操作:
StringBuilder sb = new StringBuilder();
// Using the typical printable range
for(char i=32;i<127;i++)
{
sb.Append(i);
}
string printableChars = sb.ToString();
// Choose your font
Font stringFont = new Font("Arial", 16);
// Now pass printableChars into MeasureString
SizeF stringSize = new SizeF();
stringSize = e.Graphics.MeasureString(printableChars, stringFont);
// Work out average width of printable characters
double average = stringSize.Width / (double) printableChars.Length;
棘手,因为您也应该使用字符频率。如果您曾经看过芬兰语及其所有的“i”和“l”,您会意识到即使是纯 ASCII 字体也没有明确定义的平均字符宽度。
我从未在 .NET 中看到过平均字符宽度属性。您可以使用 Graphics.MeasureString 或 TextRenderer.MeasureString 获取特定字体中特定字符串的宽度。