如何将字形的Horizo​​ntalAdvance小于字形的宽度?

时间:2017-07-25 13:29:37

标签: fonts freetype glyph freetype2

我使用的是C#FreeType库SharpFont。 加载Times New Roman OpenType文件后,我获得所有字形的指标。 我注意到了chars& f','' y',' A',' /&的Horizo​​ntalAdvance #39;,' \'小于它们的正常宽度和char' @'的垂直提升。小于它的高度。这怎么可能?我一直认为Horizo​​ntalAdvance是宽度加上一些填充(bearingX)。

1 个答案:

答案 0 :(得分:1)

关于水平推进,这是很正常的。许多因素可以决定字体文件中字符的间距,并且提前宽度只是最简单和最粗糙的,旨在适用于大多数情况。例如, f 的前进宽度比其横杆稍宽,因为它最常见于小写字母之前,如 a e - [R 。它弯曲的上升部分可以超过那个宽度并悬挂在下一个角色的空间中。当你得到像 l b T 这样的高大字符时,这只是一个问题,并且在这种情况下通过字距调整避免了碰撞或者通过创建一个结扎线。

字体设计师通常通过在字符设计器之间将它们隔开来确定字符的前进宽度。资本通常在大写Os和Hs之间间隔,如下:

<00> OOOFOOO HHHFHHH

小写字符在小写字母os和ns之间间隔:

ooofooo nnnfnnn

这些都经过仔细调整,以便“看”&#39;很平衡。然后字距处理字符对之间太多或太少空间的问题情况。 f v w y A 等字符V W Y / 经常会超过他们的前进宽度,因为那是什么&#39;需要使间距看起来正确。

关于 @ 的垂直前进,这可能是错误的。垂直前进用于CJK脚本和其他诸如传统蒙古语,其中字符要垂直向下读取,而不是水平读取。这里可能意外地包括垂直前进,或者可能没有对其进行适当的测试以用于例如垂直的中文写作。或者它可能只是略微延伸到上下空间,这被认为不是问题。