0

比较 CTFontGetAscent() 的输出和 OS X 上相同字体的上升值,我得到两个非常不同的值(考虑点大小)。

示例:Helvetica Neue 的上升率为 952,导致点数为 35 的上升率为 33。CTFontGetAscent 返回 16。Marker Felt(宽)的上升率为 800,导致点数为 35 的上升率为 27 点。CTFontGetAscent 返回37.

考虑 CTFontGetUnitsPerEm() 的值不会产生正确的值。

设备上的字体真的与“桌面字体”有很大不同,还是我遗漏了什么?还是 CoreText 返回了不正确的结果?

4

1 回答 1

1

(回答我自己的问题)许多桌面应用程序报告了不同的上升值,可在字体的 Windows 兼容性表(“OS/2”表)中找到。

可以通过以下方式访问表的原始字节: CTFontCopyTable(myFontRef, 'OS/2', 0);

表中的所有字节都按网络顺序排列(参见http://linux.about.com/library/cmd/blcmdl3_ntohs.htm

前 2 个字节构成版本号。每个表格版本的规范可以在http://www.microsoft.com/typography/otspec/os2.htm找到。请记住将每个字段的字节翻转到主机顺序。

表格的“sTypoAscent”字段给出了上升值。将它除以 CTFont (CTFontGetUnitsPerEm) 提供的 unitsPerEm 值,就可以得到字体的上升百分比。

于 2013-04-26T09:23:49.380 回答