如何使用 Win2D(行间距)计算 FontFamily 的高度?

Posted

技术标签:

【中文标题】如何使用 Win2D(行间距)计算 FontFamily 的高度?【英文标题】:How to calculate the height of a FontFamily with Win2D (Line Spacing)? 【发布时间】:2017-06-28 23:37:41 【问题描述】:

我想知道如何使用 Win2D 在 Window 通用应用程序中计算给定字体的高度(及其属性,如大小、粗细、样式...)。

我之前使用了CanvasTextLayout,但它需要一个文本才能工作,就像这一行:

var ctl = new CanvasTextLayout(session, "Some text", new CanvasTextFormat(), constraintWidth, constraintHeight);

在我的例子中,我不会有文本,因为我要查找的是给定字体的所有字形的高度(包括其样式、大小、粗细... ) 很合适。

编辑:我也尝试过 CanvasFontFace 类,但它似乎没有任何公共构造函数。

【问题讨论】:

您在寻找 GetGlyphRunBounds microsoft.github.io/Win2D/html/… 吗?否则 CanvasTexFormat 具有 FontSize 属性,与字体系列一样 我认为 GetGlyphRunBounds 不是我需要的,因为我必须至少指定一个字形。它与这个问题完全相同,但在 Win2D 中。 ***.com/questions/4509613/…。请看答案。在 WPF 中,它被称为“LineSpacing”。 我不认为你可以像在 WPF 中那样获得默认的LineSpacing。您必须先绘制文本。这是 Win2D 的限制。 好的,现在问题很清楚了:)。 CanvasTextFormat 有一个 LineSpacing 属性:microsoft.github.io/Win2D/html/… 它有这个属性,但它总是-1。我认为这不是我们想要的:( 【参考方案1】:

但是您已经走在正确的道路上。你看。 G。 fg 作为文本。 f 分配上部区域,g 分配下部区域,因此您可以获得当前画布字体中文本的总高度。

【讨论】:

这毕竟是个 hack ;) 也许吧,但我经常看到并使用它,没有任何问题。事实上,我还没有找到令人满意的替代方案。不过,我会很好奇。我记得我一直遇到值太小或太大或性能不佳的问题,试图以另一种方式解决这个问题。 哦,LineSpacing 在排版的意义上可能包括额外的高度单位,以便很好地设置多行文本。我不确定是否存在 Wpf 中的LineSpacing 或类似行为的情况。如果您真的只想要实际的文本高度而没有任何可能的额外空间,那么这个解决方案在定义上应该是正确的,因为它专注于当前字体将产生的字形的度量。

以上是关于如何使用 Win2D(行间距)计算 FontFamily 的高度?的主要内容,如果未能解决你的问题,请参考以下文章

iOS中文行间距富文本高度与显示那些坑

UILabel设置行间距和字间距并计算高度-b

如何把keil中的代码行间距调宽

IOS 富文本 ,设置行间距字间距,计算高度(转载组合而成)

IOS 富文本 ,设置行间距字间距,计算高度(转载组合而成)

IOS 富文本 ,设置行间距字间距,计算高度(转载组合而成)