一种点阵字库转换方法与流程

文档序号:22737396发布日期:2020-10-31 09:17阅读:308来源:国知局
一种点阵字库转换方法与流程

技术领域
】本发明涉及点阵字库
技术领域
,具体地涉及一种点阵字库转换方法。
背景技术
:嵌入式系统的字符显示普遍采用的是点阵字库。随着彩屏在小型嵌入式产品的大量普及,用户对于字符显示的丰富性要求越来越高。希望能覆盖更全的字符编码范围,比如gb2312、gbk、ascii等;以及希望能支持更多样的字体,比如同时支持宋体,楷体等;希望能支持多种字号,比如同时支持24点阵和16点阵等。小型嵌入式产品有限的存储空间与字符显示需求之间的矛盾越发突出,因此需要对已有的点阵字库的占用容量进行缩减技术实现要素:本发明要解决的技术问题,在于提供一种点阵字库转换方法,减少点阵字库的占用容量。本发明是这样实现的:一种点阵字库转换方法,包括:获取第一点阵字库,所述第一点阵字库中字符编码对应的点阵显示状态是用显示点阵字节值表示;扫描所述第一点阵字库中所有字符编码对应的点阵数据,统计各个所述显示点阵字节值出现的概率,利用概率值创建哈夫曼树,对所创建的哈夫曼树进行编码,生成哈夫曼树码表并保存;基于所述哈夫曼树码表,顺序对所述第一点阵字库中的点阵数据进行编码压缩,生成压缩数据长度表与压缩数据内容表;将所述哈夫曼树码表、压缩数据长度表与压缩数据内容表依次保存在第二点阵字库的点阵数据字段。进一步地,所述哈夫曼树码表记录各个所述显示点阵字节值的码字长与码字值。进一步地,所述顺序对所述第一点阵字库中的点阵数据进行编码压缩,生成压缩数据长度表与压缩数据内容表具体为:比较编码压缩前和编码压缩后的字符编码对应的点阵数据长度,选取点阵数据长度更小的点阵数据储存在所述压缩数据长度表与压缩数据内容表。进一步地,还包括:读取所述第二点阵字库的点阵数据,先根据传入的字符编码索引其在所述第二点阵字库的字符编码集合中的偏移量,然后根据所述压缩数据长度表,计算出所述传入的字符编码在所述压缩数据内容表的偏移地址,得到所述压缩数据内容表中对应的点阵数据压缩后的数据内容,再根据所述哈夫曼树码表,解压出点阵数据。进一步地,所述第二点阵字库还包括字段:剪辑类型、资源信息与字库点阵数据长度,所述字库点阵数据长度用于储存所述点阵数据字段中的数据长度;当没有对所述第一点阵字库的字符编码集合进行剪辑时,所述资源信息字段为空,所述剪辑类型字段作“全编码”标记;当对所述第一点阵字库的字符编码集合中连续的字符编码进行裁剪时,所述资源信息字段记录裁剪区间数与裁剪区间项,所述裁剪区间项包含每个裁剪区间的起始字符编码值和结束字符编码值,所述剪辑类型字段作“裁剪”标记;当对所述第一点阵字库的字符编码集合中连续的字符编码进行保留时,所述资源信息字段记录保留区间数与保留区间项,所述保留区间项包含每个保留区间的起始字符编码值和结束字符编码值,所述剪辑类型字段作“保留”标记。进一步地,当对所述第一点阵字库的字符编码集合中不连续的字符编码进行裁剪时,所述资源信息字段记录裁剪编码数与裁剪编码值,所述剪辑类型字段作“裁剪”标记;当对所述第一点阵字库的字符编码集合中不连续的字符编码进行保留时,所述资源信息字段记录保留编码数与保留编码值,所述剪辑类型字段作“保留”标记。进一步地,所述第二点阵字库还包括字段:压缩方式,当没有对所述第一点阵字库进行压缩时,所述压缩方式字段作“不压缩”标记;当对所述第一点阵字库进行哈夫曼编码压缩时,所述压缩方式字段作“哈夫曼编码”标记。进一步地,所述第二点阵字库还包括字段:字符点阵存储宽度与字符点阵存储高度,所述字符点阵存储宽度与字符点阵存储高度分别用于记录所述点阵数据字段中字符编码对应的点阵宽度与高度。本发明的优点在于:(1)将哈夫曼编码应用于点阵字库压缩的方案,建立统一的哈夫曼树码表,对点阵字库中的每个字符编码对应的点阵数据进行哈夫曼编码压缩,生成新点阵字库,有效地减小点阵字库的容量,非常适用于小成本低配置的嵌入式设备;不仅能明显降低产品软件的开发及维护成本,通过减小对存储空间的占用还能降低产品硬件成本。(2)支持可能用到的所有裁减方式;可以裁减单个或多个编码区间,单个或多个字符编码;可以只保留单个或多个编码区间,单个或多个字符编码;能达到自动适配各种情况的目的。【附图说明】下面参照附图结合实施例对本发明作进一步的说明。图1是本发明的点阵字库转换方法流程图。图2是本发明中字符点阵的示意图。【具体实施方式】本发明实施例通过提供一种点阵字库转换方法,解决了现有技术中小型嵌入式产品有限的存储空间与字符显示需求之间的矛盾的技术问题,实现了减少点阵字库的容量的技术效果。本发明实施例中的技术方案为解决上述问题,总体思路如下:将哈夫曼编码应用于点阵字库压缩的方案,建立统一的哈夫曼树码表,对点阵字库中的每个字符编码对应的点阵数据进行哈夫曼编码压缩,生成新点阵字库并保存哈夫曼树码表、压缩数据长度表与压缩数据内容表。为了更好地理解上述技术方案,下面将结合说明书附图以及具体的实施方式对上述技术方案进行详细的说明。参阅图1与图2,本发明的点阵字库转换方法的优选实施例。本发明的方法,包括:步骤s10、获取第一点阵字库,如gbk点阵字库(字体为宋体,字体的像素规格为24×24),gbk编码标准兼容gb2312,共收录汉字21003个、符号883个,并提供1894个造字码位,简、繁体字融于一库,还包括标点符号、数学符号、数字序号、全角数字字母、日文平假名、片假名、希腊字母、俄文字母、图形符号、制表符、拼音、注音符号等。第一点阵字库中的点阵规格m×n表示为:字符编码对应的点阵图中每行有m个点,共有n行;为点阵字库的文件内存储的点阵规格。点阵字库中字符编码对应的点阵显示状态是用字节值表示,该字节值称为显示点阵字节值;点阵图中一个点用一个比特位表示,m×n为一字节的整数倍,一字节有八个比特位组成;所以一字节,即显示点阵字节值有256种。步骤s20、扫描所述第一点阵字库中所有字符编码对应的点阵数据,设点阵字库中字符编码共有c个。一个字符编码对应的点阵是由多个显示点阵字节值来表示,点阵数据即为多个显示点阵字节值组成的数据。步骤s30、统计各个所述显示点阵字节值出现的概率,第1种显示点阵字节值“00000000”出现有概率为p1,第2种显示点阵字节值“00000001”出现有概率为p2,第j种显示点阵字节值“出现有概率为pj,第256种显示点阵字节值“11111111”出现有概率为p256。如下表所示:步骤s40、利用概率值创建哈夫曼树,对所创建的哈夫曼树进行编码,生成哈夫曼树码表并保存。哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度。哈夫曼编码是可变字长编码(vlc)的一种,该编码方法完全依据字符出现概率来构造异字头的平均长度最短的码字。所述哈夫曼树码表记录各个所述显示点阵字节值的码字长与码字值;码字长表示码字值的有效比特位数,码字值为哈夫曼树编码值。哈夫曼树码表记为{x0,m0,x1,m1,x2,m2,…,x255,m255},其中x0即为显示点阵字节值“00000000”对应的码字长,m0即为显示点阵字节值“00000000”对应的码字值,x1即为显示点阵字节值“00000001”对应的码字长,m1即为显示点阵字节值“00000001”对应的码字值,x2即为显示点阵字节值“00000010”对应的码字长,m2即为显示点阵字节值“00000010”对应的码字值,x255即为显示点阵字节值“11111111”对应的码字长,m255即为显示点阵字节值“11111111”对应的码字值。由于码字值是可变字长编码(vlc),因此可以约定多字节时采用小端模式,有效位数不足8的整数倍时,取字节内的低位为有效位。设码字长的值用l表示,则码字值占用的字节数v的取值用c语言表示为:v=l%8==0?0:1;v+=l/8。步骤s50、以每个字符编码对应的点阵数据大小为单位,对所述点阵字库中的点阵数据进行分割,基于所述哈夫曼树码表,顺序对所述第一点阵字库中的点阵数据进行编码压缩,生成压缩数据长度表与压缩数据内容表,所述压缩数据长度表用于顺序存储每个字符编码对应的点阵数据压缩后的长度,压缩数据长度表记为{y0,y1,y2,…,yk,…,yc-1},其中yk即为第k+1个字符编码对应的点阵数据压缩后的长度,k为整数。所述压缩数据内容表用于顺序存储每个字符编码对应的点阵数据压缩后的数据内容;压缩数据内容表记为{z0,z1,z2,…,zk,…,zc-1},其中zk表示第k+1个字符编码对应的点阵数据压缩后的由哈夫曼树编码构成的数据内容。步骤s60、将所述哈夫曼树码表、压缩数据长度表与压缩数据内容表依次保存在第二点阵字库的点阵数据字段。如下表所示:第二点阵字库就是转换后得到的新点阵字库。其中,所述顺序对所述第一点阵字库中的点阵数据进行编码压缩,生成压缩数据长度表与压缩数据内容表具体为:比较编码压缩前和编码压缩后的字符编码对应的点阵数据长度,选取点阵数据长度更小的点阵数据储存在所述压缩数据长度表与压缩数据内容表。即:如果经过编码压缩后所述字符编码对应的点阵数据长度,大于或等于压缩前的点阵数据长度,就将压缩前的所述字符编码对应的点阵数据长度与点阵数据分别保存在所述压缩数据长度表与压缩数据内容表;即不进行哈夫曼编码处理保存。如果经过编码压缩后所述字符编码对应的点阵数据长度,小于压缩前的点阵数据长度,就将压缩后的所述字符编码对应的点阵数据长度与数据内容分别保存在所述压缩数据长度表与压缩数据内容表。具体为:假设第k个字符编码压缩前的点阵数据长度为sk,压缩前的点阵数据内容为rk,经过哈夫曼编码压缩后的点阵数据长度为tk,经过哈夫曼编码压缩后的点阵数据内容为uk;如果sk≥tk,就将tk的值传给压缩数据长度表中的yk,将uk的值传给压缩数据内容表中的zk;如果sk<tk,就将sk的值传给压缩数据长度表中的yk,将rk的值传给压缩数据内容表中的zk。提升压缩效果。还包括:读取所述第二点阵字库的点阵数据,先根据传入的字符编码索引其在所述第二点阵字库的字符编码集合中的偏移量,对于第k个字符编码,其偏移量就为k;比如在gbk库中“我”这个字的字符编码为ced2,在gbk库的字符编码集合中是属于第14776个。根据所述压缩数据长度表,计算出所述传入的字符编码在所述压缩数据内容表的偏移地址,如第k个字符编码的偏移地址表示为∑yg,0<g<k。第1个字符编码在压缩数据内容表中的偏移地址为0。得到所述压缩数据内容表中对应的点阵数据压缩后的数据内容,再根据所述哈夫曼树码表,解压出点阵数据。就可以在显示屏中显示出来。结合以下两张表格,对第二点阵字库作进一步描述。资源信息字段记录偏移字节数作用区间数02编码区间个数,用m表示区间1起始编码值2i指示第1个编码区间的起始编码值区间1结束编码值2+ii指示第1个编码区间的结束编码值……区间m起始编码值2+2i(m-1)i指示第m个编码区间的起始编码值区间m起始地址2+2i(m-1)+ii指示第m个编码区间的结束编码值编码数2+2im2编码值个数,用n表示编码值14+2imi指示第1个编码值……编码值n4+2im+i(n-1)i指示第n个编码值上表中的i值取决于编码类型;如果是asc码,则i值为1,即每个编码占1个字节;如果是gbk码,i值为2,即每个编码占2个字节。表格说明:所述第二点阵字库还包括字段:剪辑类型、资源信息与字库点阵数据长度,所述字库点阵数据长度用于储存所述点阵数据字段中的数据长度;当没有对所述第一点阵字库的字符编码集合进行剪辑时,所述资源信息字段为空,所述剪辑类型字段作“全编码”标记,如标记为0。当对所述第一点阵字库的字符编码集合中连续的字符编码进行裁剪时,所述资源信息字段记录裁剪区间数与裁剪区间项,所述裁剪区间项包含每个裁剪区间的起始字符编码值和结束字符编码值,所述剪辑类型字段作“裁剪”标记;如标记为1。由于gbk库中包含了日文、俄文等信息,但有的客户使用的产品字符显示无需用到日文与俄文的字符,那就可将gbk点阵字库中的日文与俄文的字符编码与点阵裁剪掉,这些日文或俄文的字符编码都是连续存放的。这样裁剪区间数即为2,假设第1个裁剪区间为日文字符编码,第1个裁剪区间项为日文字符的起始字符编码值与结束字符编码值;第2个裁剪区间为俄文字符编码,第2个裁剪区间项为俄文字符的起始字符编码值与结束字符编码值;依次类推。这样就不存在对日文与俄文的字符编码对应的点阵数据进行哈夫曼编码压缩。当对所述第一点阵字库的字符编码集合中连续的字符编码进行保留时,所述资源信息字段记录保留区间数与保留区间项,所述保留区间项包含每个保留区间的起始字符编码值和结束字符编码值,所述剪辑类型字段作“保留”标记;如标记为2。比如有的客户使用的产品字符显示只用到中文字符与希腊字符,这些中文或希腊文的字符编码都是连续存放的。这样保留区间数即为2,第1个保留区间项为中文字符的起始字符编码值与结束字符编码值,第2个保留区间项为希腊文的起始字符编码值与结束字符编码值。这样就只对中文字符与希腊文字符的字符编码对应的点阵数据进行哈夫曼编码压缩。当对所述第一点阵字库的字符编码集合中不连续的字符编码进行裁剪时,所述资源信息字段记录裁剪编码数与裁剪编码值,所述剪辑类型字段作“裁剪”标记;比如裁剪掉“☆”、“◇”、“△”。资源信息字段记录裁剪编码数为3,记录“☆”、“◇”、“△”的字符编码,将对应的点阵数据删除。当对所述第一点阵字库的字符编码集合中不连续的字符编码进行保留时,所述资源信息字段记录保留编码数与保留编码值,所述剪辑类型字段作“保留”标记。结合上文描述,这样就只对保留的字符编码对应的点阵数据进行哈夫曼编码压缩,其余的删除。所述第二点阵字库还包括字段:压缩方式,当没有对所述第一点阵字库进行哈夫曼编码压缩时,所述压缩方式字段作“不压缩”标记;这样就可以得到只进行字符裁剪没有进行字符压缩的第二点阵字库。当对所述第一点阵字库进行哈夫曼编码压缩时,所述压缩方式字段作“哈夫曼编码”标记。所述第二点阵字库还包括字段:字符点阵存储宽度与字符点阵存储高度,所述字符点阵存储宽度与字符点阵存储高度分别用于记录所述点阵数据字段中字符编码对应的点阵宽度与高度。便于用户了解所用到的点阵字库的点阵规格。对应上文中提到的第一点阵字库的点阵规格m×n。实际中存在字符在显示屏中,像素宽度不是为8的倍数;为了简化处理逻辑,在点阵字库中会通过填充的方式在存储上实现字符点阵宽度补充为8的倍数。比如点阵字库文件名约定为gbk_22x22_宋体.fnt,即通过文件名可知点阵字库中字符显示的有效像素宽高为22x22。在数据存储上字符点阵存储宽度与字符点阵存储高度会补齐为24x22。但有效位仍为22。即m大于等于字体像素规格的每行像素数量值。如点阵字库文件名约定为asc_12x24_calibri.fnt,即点阵字库中字符显示的有效像素宽高为12x24。由于两行点阵就刚好占据24比特,即3个字节,处理逻辑并不复杂。因此,数据存储上字符点阵存储宽度与字符点阵存储高度可以采用原始的12x24,也可以补齐为16x24。对于字符点阵存储宽度是否补齐8的倍数,根据用户需求进行弹性设计,不是对本发明的技术方案的硬性要求,这些但都在本发明的权利要求的保护范围内。以下对通过本发明的方法生成的新点阵字库的文件名进行约定说明。生成新点阵字库后,新点阵字库的文件名的格式自动修改为:“编码类型_像素规格_字体.fnt”。其中各项说明如下:编码类型:如asc,gbk,gb2312像素规格:以像素为单位,格式为“宽x高”,宽高中间是小写字母x字体:如“宋体”、“微软雅黑”、“楷体”、“仿宋”等。这样就可以让用户很直观的看到目前终端上已经支持了哪些字库,也方便系统索引用户需要的字体。通过本发明的方法生成的新点阵字库,大幅度缩小了容量,减小对存储空间的占用;非常适用于储存在小型嵌入式产品等终端设备的储存器中,便于终端设备的显示屏显示字符点阵以及在打印纸上打印字符点阵。用户可以根据需要动态地新增、删除或修改点阵字库,在储存器中安装或卸载点阵字库,只需要载入新点阵字库文件或删除不需要的点阵字库文件,变更已有的点阵字库也只需要更新对应文件即可。不必修改终端设备的应用程序,储存器中可随意增加、删除或修改点阵字库,可裁剪可压缩可扩展。不仅能明显降低产品软件的开发及维护成本,通过减小对存储空间的占用还能降低产品硬件成本。虽然以上描述了本发明的具体实施方式,但是熟悉本
技术领域
的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1