OpenType文件中的cmap表会将字符代码转换为字形ID。
有没有人能帮我理解一下C语言表达式:
*(idRangeOffset[i]/2 + (c - startCount[i]) + &idRangeOffset[i])Here是格式4的cmap子表。
发布于 2011-07-07 03:02:11
因此,在表达式i=段索引和c=字符代码中。idRangeOffset将数据段的偏移量获取到cmap内部的glyphIdArray中。在本例中,您实际要查找的值是glyphIdArraysomething。因为在字体文件中glyphIdArray紧跟在idRangeOffset之后,所以使用idRangeOffset作为基指针。
要得到glyphIdArray的开头,您需要添加idRangeOffset,但由于该值是以字节为单位的,而idRangeOffset表是16位的,因此您需要除以2才能得到字数。然后,您将获得glyphIdArray中的段i的偏移量。
然而,你的角色在这个片段中的偏移量是c- startCounti,所以你也需要添加它。
最后一个表达式是一个指针,因此您需要取消对它的引用,以实际获得字形的索引。
然后将该索引用于LOCA表。
发布于 2012-11-28 09:24:44
不确定你是否还需要它,但我将我的发现分享给周围的人。
&idRangeOffset[i]指的是idRangeOffset[i]的地址,或者在文档中指的是从文件开头开始的偏移量。
*(x)是x地址的内容。
因此,找到idRangeOffset[i]的地址,将其添加到idRangeOffset[i]/2 + (c - startCount[i]),结果将是另一个地址。该地址的内容是您想要的字形id。
发布于 2011-04-21 20:56:49
RTFM!
“如果段的idRangeOffset值不是0,字符代码的映射依赖于glyphIdArray。从startCode开始的字符代码偏移量被加到idRangeOffset值中。这个和被用作与idRangeOffset中当前位置的偏移量,以索引出正确的glyphIdArray值。这个模糊的索引技巧有效,因为glyphIdArray紧跟在字体文件中的idRangeOffset之后。产生字形索引的C表达式是:
*(idRangeOffseti/2 + (c - startCounti) + &idRangeOffseti)
值c是所讨论的字符代码,i是c出现在其中的段索引。如果从索引操作获得的值不是0(表示missingGlyph),则将idDeltai添加到该值以获得字形索引。idDelta算法的模数是65536。“
https://stackoverflow.com/questions/5744129
复制相似问题