Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用DirectWrite确定基线位置_C++_Truetype_Direct2d_Baseline_Directwrite - Fatal编程技术网

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

C++ 如何使用DirectWrite确定基线位置,c++,truetype,direct2d,baseline,directwrite,C++,Truetype,Direct2d,Baseline,Directwrite,使用DirectWrite和Direct2D1,我试图模拟Illustrator CS6对区域文本框所做的渲染。CS6有一个选项,其中基线可以放置在距离区域文本框顶部相当于字体“em box size”的距离处。例如,使用Trajan Pro字体,100pt点大小,基线距离区域文本框顶部87.5pt 从IDWriteFontFace对象,我可以获得上升、下降、DesignUnitsPrem值等 似乎缺少的是相对于em框顶部的基线位置 是否有方法以设计单位获得相对于em框顶部的基线位置 DWRIT

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

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

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

是否有方法以设计单位获得相对于em框顶部的基线位置

DWRITE\u FONT\u度量没有它。
我查看了DWRITE\u LINE\u度量,但它的基线值是Ascend+lineGap,并且不匹配。

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

EM高度-上升=基线

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


通常,EM高度=按该顺序上升+下降+线间距。同样,我相信负的线间距是完全有效的,所以不管它是如何分布的,都在底部,一半在顶部,一半在底部(我认为这没有什么意义,但我可能是错的),或者不管怎样,你都需要保持一致。希望这有帮助。

IDWriteTextLayout增加了字体行距,至少对于使用自然度量的水平阅读方向是如此。上升+下降+线间距通常大于EM框(designUnitsPerEm),范围通常在1.1到1.4之间。例如,Segoe UI的A+D+LG比率为1.33(2724/2048)。从技术上讲,OpenType OS/2::sTypoLineGap是一个有符号的字段,但我从未见过任何带有负值的字体。