0

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

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

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像素的文本高度。
  • TextRenderer.MeasureText“Tg”字符串给了我13像素。
  • 如果截取屏幕截图并在 Photoshop 中测量(从g的最低边界到T的最高边界),我将获得10像素。

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

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

4

1 回答 1

5

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

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

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

于 2018-03-11T16:24:26.003 回答