获取 WinForms 字体的精确高度(以像素为单位)
Get exact height of WinForms Font in pixels
这可能是一个重复的问题,但我找不到答案。
我唯一的问题是如何获取 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 的公式计算得到 19px 文本高度。
TextRenderer.MeasureText
对于 "Tg" 字符串给我 13px.
- 如果截屏并在 Photoshop 中进行测量(从 g 的最低限度到 T 的最高限度)我会接收 10px.
我做错了什么以及这些值是如何相互关联的?目标是尽可能接近屏幕截图的测量结果。
TextRenderer.MeasureText
占用大量资源,我无法在抽奖期间随时使用它。
要获取像素,请使用转换公式:
descentPixel = font.Size * descent / fontFamily.GetEmHeight(FontStyle.Regular);
由此linkhttps://docs.microsoft.com/en-us/dotnet/framework/winforms/advanced/how-to-obtain-font-metrics
这可能是一个重复的问题,但我找不到答案。
我唯一的问题是如何获取 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 的公式计算得到 19px 文本高度。
TextRenderer.MeasureText
对于 "Tg" 字符串给我 13px.- 如果截屏并在 Photoshop 中进行测量(从 g 的最低限度到 T 的最高限度)我会接收 10px.
我做错了什么以及这些值是如何相互关联的?目标是尽可能接近屏幕截图的测量结果。
TextRenderer.MeasureText
占用大量资源,我无法在抽奖期间随时使用它。
要获取像素,请使用转换公式:
descentPixel = font.Size * descent / fontFamily.GetEmHeight(FontStyle.Regular);
由此linkhttps://docs.microsoft.com/en-us/dotnet/framework/winforms/advanced/how-to-obtain-font-metrics