MTK矢量字库与研究

来源:互联网 发布:英国阶级 知乎 编辑:程序博客网 时间:2024/05/04 06:44

这两天在看矢量字库相关文档,结合MTK源码现整理如下:

1.字体矢量化原理,多边形填充原理,多边形填充最需要关注的就是斜率,计算每条边的斜率,从而得到每条边在每一行上的切点。然后从左到右,将各切点连接起来,逐行进行。多边形有两种填充方式,Alternate和Winding。矢量字体主要用的前一种方式,而winding会将所有的切点都连接起来,没有了中间的分隔区域。

2..矢量字库的总体结构,矢量字库共分三个区域,它们是:(1)索引表区 该区共有6768个表项,每个表项由6个字节构成,前4个字节表示该表项对应汉字字形在库中的绝对偏移地址,后两个字节为组成该汉字字形数据的字节数。(2)空白区:该区每个字节为0。(3)字形数据区:在字形数据区中,存放各汉字的字形数据,字形数据由若干笔划数据构成,每个笔划数据由一个多边形构成,其数据组织表现为多边形起点以及标识符和相邻点问的相对位置,字形数据以压缩形式存贮.

 

3.MT6253开启矢量字体,6253平台已经支持矢量运算.默认矢量字库 latin.ttf,现在模拟器如下图:

 

(短信符号选择窗口,出现很多空白符号.)

根据代码空白处应该显示如下字符:

 

找到对应符号的Microsoft unicode码,例如回车键((U8 *) "/n/0/0",)没显示,对应Microsoft unicode码应是$0085,这里以Macintosh 罗马语,Microsoft Unicode平台为例.在latin.ttf字库里新增一个回车键.

 

设置好Unicode映射表.

ok,其它几个字符类似用上述方法,重新编译工程,make resgen 再make r,见模拟器图片效果.

全部显示出来咯,另外本身ttf字库是由每个字由若干笔划或笔划的连通体组成,库中存放的即是这些线段的端点坐标, 由于每个笔划的折线数不一样,每个字的笔划数也不同+字在库中所占的长度是不相等的。因此定位方法与点阵字库定位方法不同。字形输出时,经常进行各种变换,如平移、缩放、旋转、倾斜、投影等,利用矢量或曲线字库,算法简单、速度快、失真小,因此效果好,可以产生高质量的字输出。同时增加字库本身占用内存.可以利用fontcreat等工具,对字体剪裁,平台支持压缩.因为项目中只用到标准英文字库,我删掉了其它语言的支持.如图:

这样可以减小5K左右的内存空间,呵,空间紧张,减少多少是多少..