gpt4 book ai didi

c++ - 如何使用 DirectWrite 确定基线位置

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:29:36 27 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

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

EM 高度 - 上升 = 基线

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

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

关于c++ - 如何使用 DirectWrite 确定基线位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13939264/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com