【问题标题】:Truetype font spacing?Truetype字体间距?
【发布时间】:2011-04-19 12:57:26
【问题描述】:
我正在对 True Type 字体进行矢量化以将它们呈现为 Direct3D 基元。到目前为止,我已经成功地使用 GetGlyphOutline 提取了字形,并将它们呈现为线表原语。无论如何,关于间距...
如何找出字符之间的间距,或者它是如何/在哪里确定的?
很明显,空间因非等宽字体而异。
是否有 GDI+ 或其他 windows 函数调用来确定间距?
【问题讨论】:
标签:
text
fonts
directx
rendering
truetype
【解决方案1】:
您指的是字形的前进宽度(存储在字体的hmtx 表中,或用于垂直文本的vmtx)。通过 GDI,听起来你正在使用而不是 DirectWrite,你可以使用:
-
GetCharABCWidthsI 如果您已经有一个字形 ID 数组。这种方法可以支持 Unicode 中的任何字符,包括扩展的 CJK 和埃及象形文字等新添加的字符,而不仅仅是较低的基本多语言平面。
-
GetCharWidth32 用于字符宽度 - 仅限于基本平面,但是是简单的选项。
- 使用 GGO_METRICS 调用 GetGlyphOutline 并使用 gmCellIncX。不过,这会返回比您可能感兴趣的更多字段。
字距调整是对标称推进的附加可选调整,例如在单词“AVATAR”中,为了美观,“A”和“V”会更接近。
【解决方案2】:
我对direct3d一无所知,但是如果您只是在度量之后,它们就会存储在字体字距调整表中; GetKerningPairs 会告诉你字符对集的正确位置。