2

使用 DirectWrite 和 Direct2D1,我试图模仿 Illustrator CS6 对区域文本框的渲染。CS6 有一个选项,基线可以放置在距离区域文本框顶部的距离处,该距离等于字体的“em 框大小”。例如,使用 Trajan Pro 字体,100pt 磅值,基线距离区域文本框顶部 87.5pt。

从 IDWriteFontFace 对象,我可以获得上升、下降、designUnitsPerEm 值等。

似乎缺少的是相对于 em 框顶部的基线位置。

有没有办法获得设计单位中相对于 em 框顶部的基线位置?

DWRITE_FONT_METRICS 没有它。我查看了 DWRITE_LINE_METRICS,但它的基线值是 ascent + lineGap 并且不匹配。

4

1 回答 1

1

这只是部分答案,但在这里我在类似情况下处理这个问题的方式是:

EM 高度 - 上升 = 基线

我不确定的是如何甚至是否应该应用 linegap。许多字体的行间距为零,因此它并不相关,事实上,在我认为我熟悉的 css 世界中,通过指示行高为 1.2*EM 高度来排序添加行间距并不少见。当我真的需要知道这个差距的分布时,我总是把它归结为刚刚达到体面的高度,但我并不完全相信这是 100% 正确的,这对我所做的来说已经足够了。

一般来说,EM 高度 = Ascent + Descent + linegap 的顺序。同样,我相信负线间隙是完全有效的,所以无论它如何分布,都在底部,一半在顶部,一半在底部(我认为这真的没有意义,但我可能是错的),或者其他什么,你需要保持一致。希望这可以帮助。

于 2012-12-27T21:10:30.387 回答