我正在努力在我的程序中实现真正的字体,但是将一些数据解释为字形表中的正确值存在很大的问题。
我正在使用Windows规范(链接:https://www.microsoft.com/typography/otspec/glyf.html) 另外还有苹果规格(链接: https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6glyf.html)
为了检查我正在使用此页面的值: (链接:https://opentype.js.org/glyph-inspector.html)
我使用的字体是raleway字体 - 中等
(链接:https://www.fontsquirrel.com/fonts/raleway)
到目前为止,我可以看到numberOfContours,xMin,yMin,xMax,yMax和endpContour [0]的值是正确的。我不知道instructionLength [0]。
下面的示例不是通用代码,而是我需要正确解释的条目的字节码。
问题在于我无法理解下一个要填充的值。 (instructionLength,flags ...)
下面表示的字符是急性的。它由4分组成。
仅有一个轮廓的4个点的预期结果是:
p0:x = 106,y = 609
p1:x = 48,y = 629
p2:x = 106,y = 730
p3:x = 194,y = 730
附加信息:
advanceWidth:232
leftSideBearing:48
(来源:https://opentype.js.org/glyph-inspector.html)
总之,arcute包含50个字节。
1. 0 | -> 0000 0000 | -> 1 | -> 0000 0000 0000 0001 | (ind. 0) <- numberOfContours
2. 1 | -> 0000 0001 | ^
3. 0 | -> 0000 0000 | -> 48 | -> 0000 0000 0011 0000 | (ind. 1) <- xMin
4. 48 | -> 0011 0000 | ^
5. 2 | -> 0000 0010 | -> 609 | -> 0000 0010 0110 0001 | (ind. 2) <- yMin
6. 97 | -> 0110 0001 | ^
7. 0 | -> 0000 0000 | -> 609 | -> 0000 0000 1100 0010 | (ind. 3) <- xMax
8. 194 | -> 1100 0010 | ^
9. 2 | -> 0000 0010 | -> 730 | -> 0000 0010 1101 1010 | (ind. 4) <- yMax
10. 218 | -> 1101 1010 | ^
11. 0 | -> 0000 0000 | -> 3 | -> 0000 0000 0000 0011 | (ind. 5) <- endpContour[0]
12. 3 | -> 0000 0011 | ^
13. 0 | -> 0000 0000 | -> 23 | -> 0000 0000 0001 0111 | (ind. 6) <- instructionLength[0]
14. 23 | -> 0001 0111
15. 177 | -> 1011 0001
16. 6 | -> 0000 0110
17. 100 | -> 0110 0100
18. 68 | -> 0100 0100
19. 64 | -> 0100 0000
20. 12 | -> 0000 1100
21. 1 | -> 0000 0001
22. 1 | -> 0000 0001
23. 0 | -> 0000 0000
24. 71 | -> 0100 0111
25. 0 | -> 0000 0000
26. 0 | -> 0000 0000
27. 0 | -> 0000 0000
28. 116 | -> 0111 0100
29. 18 | -> 0001 0010
30. 1 | -> 0000 0001
31. 9 | -> 0000 1001
32. 21 | -> 0001 0101
33. 43 | -> 0010 1011
34. 177 | -> 1011 0001
35. 6 | -> 0000 0110
36. 0 | -> 0000 0000
37. 68 | -> 0100 0100
38. 19 | -> 0001 0011
39. 39 | -> 0010 0111
40. 55 | -> 0011 0111
41. 51 | -> 0011 0011
42. 106 | -> 0110 1010
43. 58 | -> 0011 1010
44. 58 | -> 0011 1010
45. 88 | -> 0101 1000
46. 2 | -> 0000 0010
47. 97 | -> 0110 0001
48. 20 | -> 0001 0100
49. 101 | -> 0110 0101
50. 0 | -> 0000 0000
我需要告诉你如何获取instructionLegths和它的值是正确的以及它用于什么(无法在文档中找到相关内容。)上面提到的标志和点。
提前谢谢!