【发布时间】:2012-11-06 18:13:10
【问题描述】:
我有一个 WinForms 用户控件,我正在尝试获取当前字体的确切水平字符间距,该字体预计是等距的。
看起来字体的 Size 属性提供了此信息,但显然是以点为单位的,而我正在以像素为单位。
var fontWidth = this.Font.Size; // Returns em-size in points--not pixels
如果我自己创建字体,我可以指定它使用像素单位。但在我的情况下,字体是通过我的用户控件的属性设置的,我无法确定字体是如何创建的。不幸的是,字体的Unit 属性是只读的。
如何以像素为单位制作现有字体返回指标?
【问题讨论】:
-
Font.Size 返回字体的高度,而不是宽度。您需要使用 TextRenderer.MeasureText(); 进行测量。由于填充物而痛苦。测量,比如说,new string('m', 100) 并除以 100。
-
谢谢,我习惯于在宽度的上下文中听到 em。我查看了
Graphics.MeasureString,但看起来MeasureText以像素为单位。我会检查一下,虽然我开始认为我最好的方法是添加声明来调用 WindowsGetTextMetrics函数。 -
@JonathanWood:MeasureText 或 MeasureString 不会给你字符间距,对吗?
-
@Neolisk:嗯,它可以用来计算字符间距。但似乎填充等有很多复杂性。我可能会直接转到 Windows API,或者我可能能够重新考虑我正在尝试做的事情。
-
@HansPassant:没有人假设魔法。 API 将提供
TEXTMETRIC.tmAveCharWidth。如果您看到通过 .NET 库以像素为单位提供此信息的方法,请分享。这就是我想要的。