如何使用 FreeType / HarfBuzz 查找垂直文本的列宽

问题描述 投票:0回答:1

我目前正在使用 FreeType + Harfbuzz 渲染文本,现在正在尝试引入垂直文本渲染(主要针对东亚脚本)。

我面临的问题是我无法弄清楚一列文本应该有多宽。对于水平文本,我们可以使用

ascent - descent
找出行高,但由于在垂直文本的情况下未提供这些值(“上升”/“下降”分别是字形的左侧和右侧部分),我有不知道我的文本栏应该有多宽。

我尝试使用 bbox 宽度作为字体,但不同字体之间的框变化很大,没有提供好的信息。

text cjk freetype vertical-text harfbuzz
1个回答
0
投票

我认为这个网站可能有用:

https://freetype.org/freetype2/docs/glyphs/glyphs-3.html#:~:text=Each%20layout%20uses%20a%20 Different%20convention%20for%20glyph,vertical%20layout%2C%20glyphs %20是%20中心%20左右%20%20基线%3A

我认为这可能是一个反复试验的情况,但是您也可以尝试以下步骤:

  1. 获取一系列垂直文本并将其输入 Harfbuzz 以获得字形和字形位置

  2. 获取生成的字形位置并使用 hb_font_subtract_glyph_origin_for_direction 中的值调整它们

  3. 应从每个字形的 y 位置中减去 vmtx 表的顶部方位

  4. 然后应从 y- 中减去每个字形的最大 y 范围 每个字形的位置

  5. 如果我想要中心基线,则应通过 vmtx 表中的 vertTypoDescender 进一步调整 x 位置

  6. 在这些位置绘制字形

© www.soinside.com 2019 - 2024. All rights reserved.