Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取WinForms字体的精确高度(以像素为单位)_C#_Winforms_Fonts_Fontmetrics - Fatal编程技术网

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

C# 获取WinForms字体的精确高度(以像素为单位),c#,winforms,fonts,fontmetrics,C#,Winforms,Fonts,Fontmetrics,这可能是一个重复的问题,但我找不到答案 我唯一的问题是如何获得WinForms中使用的字体的高度(上升+下降,没有任何间距),以像素为单位。 我有SegoeUI8.25常规字体 Font.Height给我15(像素?) 我可以使用FontFamily获取字体度量: GetEmHeight给我2048 GetCellAscent给我2210(比EM大?) GetCellDescent给我514 根据 我应该做以下几点: (ascent + descent) * font.Height / em

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

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

Font.Height
给我15(像素?)

我可以使用
FontFamily
获取字体度量:

  • GetEmHeight
    给我2048
  • GetCellAscent
    给我2210(比EM大?)
  • GetCellDescent
    给我514
根据

我应该做以下几点:

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

  • 使用MSDN的公式计算得到19px文本高度
  • TextRenderer.MeasureText
    为“Tg”字符串提供13px
  • 如果a在Photoshop中截图并测量它(从g的下限到T的上限),我将收到10px
我做错了什么,这些价值观是如何相互联系的?目标是尽可能接近屏幕截图的测量结果


TextRenderer.MeasureText
使用了大量资源,在绘制过程中我无法随时使用它。

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

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

通过此链接

获取像素,可以使用转换公式:

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

从这个链接中

你想实现什么?要获得像素,你可以使用转换公式。@Aybe只是想知道渲染计算中文本的高度。如果文本确实是单行的,则无需计算换行字(这是一种资源广泛的方式),字体的高度就足够了。您使用的是font.height,而您的引用使用的是font.Size。这与@HéctorManuelMartinezDurán的答案相同,对于他的回答,你应该为你的评论向他道歉。你想达到什么目的?要获得像素,你需要使用转换公式。@Aybe只是想知道渲染计算中文本的高度。如果文本确实是单行的,则无需计算换行字(这是一种资源广泛的方式),字体的高度就足够了。您使用的是font.height,而您的引用使用的是font.Size。这与@HéctorManuelMartinezDurán的答案相同,对于他的回答,你们应该为你们的评论向他道歉。请仔细阅读这个问题。我使用了这个公式,得到了几乎两倍于要求的高度。19像素而不是10像素请仔细阅读问题。我使用了这个公式,得到了几乎两倍于要求的高度。19像素而不是10像素