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

rat*_*ler 0 c# fonts winforms fontmetrics

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

我唯一的问题是如何获得FontWinForms中使用的高度(上升+下降,没有任何间距),以像素为单位.我有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.
Run Code Online (Sandbox Code Playgroud)

所以:

  • 使用MSDN的公式计算得到19 px文本高度.
  • TextRenderer.MeasureText对于"Tg"字符串给我13 px.
  • 如果拍摄截图并在Photoshop中测量(从g的最低边界到T的最高边界),我将获得10像素.

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

TextRenderer.MeasureText 使用大量资源,我不能在抽奖期间随时使用它.

Héc*_*rán 5

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

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

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

  • 请仔细阅读问题.我用了那个公式,几乎达到了所需高度的两倍.19 px而不是10 px (3认同)