使用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并且不匹配。
答案 0 :(得分:1)
这只是一个部分答案,但这里有 我在类似场景中处理这个问题的方法是:
EM高度 - 上升=基线
我不确定的是应该如何或甚至应该应用linegap。许多字体都有零线间隙所以它不相关,事实上在css世界中我认为我熟悉它并不常见的是通过指示线高度是1.2 * EM高度来添加线间隙。当我真的需要知道这个差距的分布时,我总是把它归结为刚刚过了好看,但我并不完全相信100%是正确的,它对我所做的事情来说已经足够好了。
通常,EM高度= Ascent + Descent + linegap的顺序。太,我认为有一个负线间隙是完全有效的,但是它得到了分布,全部在底部,一半在顶部,一半在底部(我觉得这没有意义,但我可能是错的),或者其他什么,你需要保持一致。希望这会有所帮助。