Windows窗体:
对于System.Drawing
,有一种方法可以获得字体高度。
Font font = new Font("Arial", 10 , FontStyle.Regular);
float fontHeight = font.GetHeight();
但是如何获得平均字符宽度等其他文本指标?
答案 0 :(得分:4)
使用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));
}
答案 1 :(得分:4)
字体的平均宽度并不严格,因为字距调整可能会产生影响,具体取决于任何给定字母前后的字母。
如果您想要在固定宽度场景中使用非固定大小的字体,您的主要选项是将字符与大写字母“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;
答案 2 :(得分:3)
整蛊,因为你也应该使用角色频率。如果你曾经见过芬兰语及其所有“i”和“l”,你会发现即使是纯ASCII字体也没有明确定义的平均字符宽度。
答案 3 :(得分:1)
查看我对类似问题的回答here
我猜你必须在每个角色上使用它并自己计算平均值
答案 4 :(得分:1)
我从未在.NET中看到过平均字符宽度属性。您可以使用Graphics.MeasureString或TextRenderer.MeasureString获取特定字体中特定字符串的宽度。