如何使用DirectWrite确定基线位置

时间:2012-12-18 18:33:32

标签: c++ true-type-fonts direct2d baseline directwrite

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

从IDWriteFontFace对象,我可以获得ascent,descent,designUnitsPerEm值等。

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

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

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

1 个答案:

答案 0 :(得分:1)

这只是一个部分答案,但这里有 我在类似场景中处理这个问题的方法是:

EM高度 - 上升=基线

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

通常,EM高度= Ascent + Descent + linegap的顺序。太,我认为有一个负线间隙是完全有效的,但是它得到了分布,全部在底部,一半在顶部,一半在底部(我觉得这没有意义,但我可能是错的),或者其他什么,你需要保持一致。希望这会有所帮助。