获取WinForms字体的精确高度(以像素为单位)

时间:2018-03-11 16:16:42

标签: c# winforms fonts fontmetrics

这可能是一个重复的问题,但我无法找到答案。

我唯一的问题是如何获得WinForms中使用的Font的高度(上升+下降,没有任何间距),以像素为单位。 我有 Segoe UI 8.25 Regular 字体。

Font.Height给了我15(像素?)

我可以使用FontFamily来获取字体指标:

  • GetEmHeight给了我2048。
  • GetCellAscent给了我2210(大于EM?)
  • GetCellDescent给了我514

根据MSDN

的公式

我应该这样做:

(ascent + descent) * font.Height / emHeight
which is
(514 + 2210) * 15 / 2210 = 19 pixels.

所以:

  • 使用MSDN公式计算得出 19 px文字高度。
  • TextRenderer.MeasureText代表“Tg”字符串给我 13 px。
  • 如果拍摄截图并在Photoshop中测量(从 g 的最低界限到 T 的最高界限),我会收到 10 像素。

我做错了什么以及这些价值观是如何相互关联的?我们的目标是尽可能接近截图的测量结果。

TextRenderer.MeasureText使用了大量资源,我无法在平局期间随时使用它。

1 个答案:

答案 0 :(得分:5)

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

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

从此链接https://docs.microsoft.com/en-us/dotnet/framework/winforms/advanced/how-to-obtain-font-metrics