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

Jon*_*ood 10 .net c# winforms

我有一个WinForms用户控件,我正在尝试获取当前字体的确切水平字符间距,预计是单行间距.

看起来字体的Size属性提供了这些信息,但显然是在点,我在像素工作.

var fontWidth = this.Font.Size;   // Returns em-size in points--not pixels
Run Code Online (Sandbox Code Playgroud)

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

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

Neo*_*isk 6

请在MSDN上看到这篇文章:

如何:获取字体度量标准

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

descentPixel = font.Size * descent / fontFamily.GetEmHeight(FontStyle.Regular);
Run Code Online (Sandbox Code Playgroud)

另请参阅获取单个字形指标(.net).


Ved*_*ran 5

如果使用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);
}
Run Code Online (Sandbox Code Playgroud)