以像素为单位获取字体的度量标准

时间:2012-11-18 18:49:45

标签: c# .net winforms

我有一个WinForms用户控件,我正在尝试获取当前字体的精确水平字符间距,该间距预计为单倍间距。

看起来字体的Size属性提供了这些信息,但显然是以点为单位而且我的工作是以像素为单位。

var fontWidth = this.Font.Size;   // Returns em-size in points--not pixels

如果我自己创建字体,我可以指定它使用像素单位。但在我的情况下,字体是通过我的用户控件的属性设置的,我无法确定如何创建字体。不幸的是,字体的Unit属性是只读的。

如何以像素为单位制作现有字体返回指标?

2 个答案:

答案 0 :(得分:4)

请在MSDN上看到这篇文章:

How to: Obtain Font Metrics

要获取像素,请使用转换公式。

descentPixel = font.Size * descent / fontFamily.GetEmHeight(FontStyle.Regular);

另见Get single glyph metrics (.net)

答案 1 :(得分:3)

如果使用System.Windows.Forms.Control对象,则可以使用以下代码:

using (Graphics g = this.CreateGraphics())
{
    var points = myFont.SizeInPoints;
    var pixels = points * g.DpiX / 72;
    MessageBox.Show("myFont size in pixels: " + pixels);
}