我有一个WinForms用户控件,我正在尝试获取当前字体的精确水平字符间距,该间距预计为单倍间距。
看起来字体的Size
属性提供了这些信息,但显然是以点为单位而且我的工作是以像素为单位。
var fontWidth = this.Font.Size; // Returns em-size in points--not pixels
如果我自己创建字体,我可以指定它使用像素单位。但在我的情况下,字体是通过我的用户控件的属性设置的,我无法确定如何创建字体。不幸的是,字体的Unit
属性是只读的。
如何以像素为单位制作现有字体返回指标?
答案 0 :(得分:4)
请在MSDN上看到这篇文章:
要获取像素,请使用转换公式。
descentPixel = font.Size * descent / fontFamily.GetEmHeight(FontStyle.Regular);
答案 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);
}