12

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

看起来字体的Size属性提供了此信息,但显然是以点为单位的,我正在以像素为单位。

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

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

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

4

2 回答 2

7

如果使用 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);
}
于 2013-06-21T08:30:48.133 回答
6

Please see this article on MSDN:

How to: Obtain Font Metrics

To get pixels, you use conversion formula.

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

Also see Get single glyph metrics (.net).

于 2012-11-18T19:12:16.503 回答