做个简单的总结,最近缺少激情和动力。做事要顺其自然,顺势而发,做必要的,干这些也如此。
先总结freetype的框架
然后就是truetype的一些数据。
========================================
感觉这些东西都需要慢慢一步步的积累,一下子的话走不远。
先总结freetype的框架吧。freetype用C实现面向对象,简单的分析后,觉得整个库做得简单,实用,没有太多累赘,顺其自然,没有太多刻意的封装,累赘的接口调用,用起来方便,看起来舒心!
freetype设计得比较好的有几个模块。
stream,system, module,library, face
1,library管理着多个module,(sfnt,type1,src文件夹下除了base之外的其他模块。)
2,module管理着各个模块分析文件的接口部分。例如 sfnt_interface;可以load_loca,load_cmap,lookup_table,goto_table;等。
3,stream,system封装一系列底层相关的api,而上层提供的stream给module的接口做分析用。
4,FT_Face,TT_Face,TT_Face 是FT_Face的封装,给内部用的,外部用户只有FT_Face,而TT_Face则可以做分析数据用。在中间这层转换做隔离封装用。
-----------------------------------------------------------------------
至于TrueType的文件格式分析:
1,注意truetype文件是以大端序存储的字节序,读取数据时要做转换。
2,最恍然大悟的是分析了cmap表,字符编码本质就是给映射用的。最终还是流到图元指令集。其实如果字体支持gbk编码的话,可以不做unicode转换也能够显示。不过貌似绘图API只支持unicode的。format0存储的是 ansii表的图元索引映射,format4存储的是unicode区段的图元索引映射。format4 idRan