OpenType文件中的cmap表将字符代码转换为字形ID.
任何人都可以帮助我理解C表达式:
*(idRangeOffset[i]/2 + (c - startCount[i]) + &idRangeOffset[i])
Run Code Online (Sandbox Code Playgroud)
这是Format 4 cmap子表.
因此,在该表达式中,i =段索引和c =字符代码.idRangeOffset将段的偏移量转换为cmap内的glyphIdArray.在这种情况下,您实际寻找的值是glyphIdArray [something].由于glyphIdArray紧跟在字体文件中的idRangeOffset之后,因此使用idRangeOffset作为基指针.
要到glyphIdArray开始,你需要添加idRangeOffset,但是因为该值是在字节,idRangeOffset表是16位,你需要除以2得到的字数.然后,您将获得glyphIdArray中段i的偏移量.
但是你的角色在这个片段中的偏移是在c - startCount [i],所以你也需要添加它.
最后一个表达式是一个指针,因此您需要取消引用它以实际获取字形的索引.
然后将该索引用于LOCA表.
小智 5
不确定你是否仍然需要它,但我与周围的人分享我的发现.
&idRangeOffset[i]指idRangeOffset[i]文件开头的偏移量,或者在文档的语音中.
*(x) 是x地址的内容.
所以,找到地址idRangeOffset[i],将其添加到idRangeOffset[i]/2 + (c - startCount[i]),结果将是另一个地址.该地址的内容是您想要的字形ID.
| 归档时间: |
|
| 查看次数: |
1315 次 |
| 最近记录: |