一种点阵字缩放方法及设备 【技术领域】
涉及点阵字缩放技术,尤指一种点阵字缩放方法及设备。
背景技术
在使用点阵字库的嵌入式系统中,往往会遇到需要多种不同大小字形的情况,为实现在不同大小字形之间的转换,现有技术一般可以采取以下几种方法:一是在系统中预备所需的多种大小字形的点阵字库;二是先对字符的点阵信息进行扫描获得其轮廓信息,再对其进行矢量化,再放大到所需大小字形后通过描绘贝赛尔曲线或直线及填充操作等来输出显示,此算法其实就相当于矢量算法。
但现有技术存在一些缺陷,如前者使用多个字形大小的点阵字库,显然需要成倍的存储空间,点阵字库一般用1bit空间来描述一个像素是否着色的信息,那么对于一个32*32大小的gb2312点阵字库就需要7445*32*32/8=952960字节存储空间,如果同时需要24*24、28*28、32*32等大小的字库,那么所需的存储空间是很巨大的,而后者使用点阵字库矢量化来处理,除了算法本身难以实现外,在矢量化过程和字符输出过程的算法都涉及到贝赛尔曲线的复杂曲线及矢量运算,使得在运算能力比较低的嵌入式系统中导致字符输出显示速度慢,显示效率低下。
当然,如果所需的几种字形大小成整数倍,那么可以通过对每个点放大整数倍的方法来输出显示,也就不存在上面的种种问题了,但在实际应用中,绝大部分所需的不同字形大小并不是成整数倍的,比如20*20、24*24、28*28等,因此,上述现有技术采用的方法还函需改进。
【发明内容】
针对现有技术中存在的问题,本发明旨在提供一种即可以节省字库空间又无需采用复杂的矢量算法的点阵字缩放方案,以满足用户对点阵字缩放的需求。
为解决上述技术问题,一方面,本发明的实施例提供了一种点阵字缩放方法,包括:获取原始点阵字信息,所述原始点阵字信息包括基准点阵和所述基准点阵内各像素点的着色信息;将基准点阵整数倍放大为公倍点阵,其中,所述公倍点阵的长度为所述基准点阵长度与所述目标点阵长度的公倍数,宽度为所述基准点阵宽度与所述目标点阵宽度的公倍数;根据所述基准点阵内各像素点的着色信息,获得所述公倍点阵内各像素点的着色信息;将所述公倍点阵整数倍缩小为目标点阵,并根据所述公倍点阵内各像素点的着色信息,获得所述目标点阵内各像素点的着色信息;根据所述目标点阵及其内各像素点的着色信息,获得经缩放后的点阵字。
另一方面,本发明的实施例还提供了一种点阵字缩放设备,包括:信息获取装置,用于获取原始点阵字信息,所述原始点阵字信息包括基准点阵和所述基准点阵内各像素点的着色信息;基准点阵放大装置,用于将所述基准点阵整数倍放大至公倍点阵,其中,所述公倍点阵的长度为所述基准点阵长度与所述目标点阵长度的公倍数,宽度为所述基准点阵宽度与所述目标点阵宽度的公倍数;公倍点阵着色判定装置,用于根据所述基准点阵内各像素点的着色信息,获得所述公倍点阵内各像素点的着色信息;点阵缩小和目标点阵着色判定装置,用于将所述公倍点阵整数倍缩小至目标点阵,并根据所述公倍点阵内各像素点的着色信息,获得所述目标点阵内各像素点的着色信息;目标点阵字获取装置,用于根据所述目标点阵及其内各像素点的着色信息,获得经缩放后的点阵字。
采用本发明的实施例中提供的技术方案,可以以最少的字库以及最简单的算法实现对点阵字的缩放,而无需在系统中预备多种大小字形的点阵字字库,也无需采用复杂的矢量算法。
【附图说明】
图1所示为本发明实施例中的点阵字缩放方法的流程示意图;
图2所示为图1中步骤102的实施例流程示意图;
图3所示为图1中步骤103描述的流程的一个具体实施例的流程示意图;
图4所示为图1中步骤103描述的流程的另一个具体实施例的流程示意图;
图5所示为本发明实施例中的点阵字缩放设备的结构示意图;
图6所示为图5中装置504描述的装置结构的一个具体实施例地结构示意图;
图7所示为图5中装置504描述的装置结构的另一个具体实施例的结构示意图。
【具体实施方式】
下面结合附图及优选实施例对本发明的特征及技术内容进行进一步说明。附图仅用于解释本发明而非限制。
正如上文背景技术中所提到的,要实现对其字形大小的缩放,如果是缩放整数倍,那么显然可以很简单的对每个点在水平方向和垂直方向进行相应倍数缩放就可以实现,但若不是成整数倍,则可以通过如下基本原理来实现缩放,这里假设只有一个24*24大小的点阵字库,需要输出20*20大小的字形:
24*24点阵字形和20*20点阵字形在大小上并不成整数倍关系,但如果把24*24点阵字形放大到(24*20)*(24*20)点阵字形,即每个像素点在水平方向和垂直方向都放大20倍,那么显然480*480和20*20点阵大小就成整数倍关系了,然后以480*480点阵字库为基础,在水平方向和垂直方向都整数倍缩小为20*20点阵,这样就可以输出20*20点阵字形的字符了。
对于点阵字来说,其长度和宽度一般都用像素数来衡量,比如上面的20*20,就是指20个像素点乘于20个像素点构成的点阵字。
如图1所示,为本发明实施例中的点阵字缩放方法的流程示意图。该方法主要包括点阵放大、点阵缩小部分,或者更具体地说,该方法可以包括:
101、获取原始点阵字信息,所述原始点阵字信息包括基准点阵和所述基准点阵内各像素点的着色信息。
102、将基准点阵整数倍放大至公倍点阵,并根据所述基准点阵内各像素点的着色信息,获得所述公倍点阵内各像素点的着色信息。
其中,所述公倍点阵的长度为所述基准点阵长度与所述目标点阵长度的公倍数,宽度为所述基准点阵宽度与所述目标点阵宽度的公倍数,优选的,所述公倍点阵的长度为所述基准点阵长度与所述目标点阵长度的最小公倍数,宽度为所述基准点阵宽度与所述目标点阵宽度的最小公倍数,使用最小公倍数可以节省临时缓冲区的存储空间,这点在后面也将讲到。
103、将所述公倍点阵整数倍缩小至目标点阵,并根据所述公倍点阵内各像素点的着色信息,获得所述目标点阵内各像素点的着色信息。
104、根据所述目标点阵及其内各像素点的着色信息,获得经缩放后的点阵字。
上面所讲到的基准点阵是指存储于点阵字字库中的点阵字的像素点阵列,其中每个像素点都对应有该像素点是否着色的信息,目标点阵是指用户想要得到的缩放后点阵字的像素点阵列。
如图2所示,上述图1中,步骤102中描述的点阵放大过程可以包括:
201、将所述基准点阵的各像素点分别放大至放大点阵。
其中,所述放大点阵的长度为所述公倍点阵长度与所述基准点阵长度的商值,宽度为所述公倍点阵宽度与所述基准点阵宽度的商值。
202、将所述基准点阵的各像素点的着色信息复制给相应的放大点阵中的每个像素点。
其中,步骤201可以直接通过用与所述目标点阵大小相等的点矩阵代替各像素点来实现,也可以先在水平方向上进行放大然后再将经水平放大后的点阵进一步在垂直方向上进行放大。
如图3所示,在上述图1中的步骤103所描述的流程的一个具体实施例中,步骤103中的“根据预设的抽样模式对所述公倍点阵进行抽样”可以具体包括:
301、根据预设的抽样模式对所述公倍点阵进行抽样,在各行获得数量与所述目标点阵长度一致的多个像素点样本,在各列获得数量与所述目标点阵宽度一致的多个像素点样本,其中,所述抽样模式可以是先对公倍点阵进行行取样再对行取样后的公倍点阵进行列取样,也可以是先对公倍点阵进行列取样再对列取样后的公倍点阵进行行取样。
该步骤301可以进一步分解为:
A.对公倍点阵进行行取样,即:以所述基准点阵长度为单位长度,对所述公倍点阵的各行进行行取样,其中行取样是指分别在对公倍点阵各行像素点取样时,每隔单位长度对该行像素点取样一次,依此获取多个像素点样本,该像素点样本的数目与目标点阵的长度一致。
B.对公倍点阵进行列取样,即:以所述基准点阵宽度为单位宽度,对经所述行取样后的所述公倍点阵的各列进行列取样,其中列取样是指分别在对公倍点阵各列像素点取样时,每隔单位宽度对该列像素点取样一次,依此获取多个像素点样本,该像素点样本的数目与目标点阵的宽度一致。
302、根据所述目标点阵中各像素点与所述基准点阵内各像素点的一一对应关系,获取抽样后所得所述目标点阵中各像素点的着色信息。
可以用一个公式来简洁地描述上述步骤301:
式中,u(i,j)为表征所述公倍点阵的函数,δ为抽样函数,m为所述公倍点阵长度除于所述目标点阵长度所得的商值,n为所述公倍点阵宽度除于所述目标点阵宽度所得的商值,i0和j0分别为表征在水平方向和垂直方向抽样时的抽样起始点,且i0≤m、j0≤n,L公和W公分别为所述公倍点阵的长度和宽度。
当然,也可以先进行列取样再进行行取样,此时用公式可描述为:
各参数含义与上一个公式一致。
其中,行取样是指对公倍点阵的各行每单位长度取样一次,列取样是指对公倍点阵的各列每单位宽度取样一次,比如前面提到的由24*24点阵缩放至20*20点阵的例子,其基准点阵为24*24点阵,目标点阵为20*20点阵,公倍点阵为(24*20)*(24*20)点阵即480*480点阵(优选的,也可以取最小公倍点阵即120*120,这样可以减少临时缓冲区的存储空间消耗,要注意的是,这里的最小公倍点阵是指长度和宽度均为最小公倍数的点阵,比如要把30*20点阵到14*30,则最小公倍点阵为(15*2*7)*(10*2*3)即210*60),对公倍点阵进行行取样时,先分析第一行,将第一行每24个像素取样一次,这样第一行就获得了20个样本(取样时,样本本身携带的着色信息仍然保留),依次分析每一行,每一行都获取20个样本,这样便获得一个20*480点阵,参照行取样的办法再对20*480点阵进行列取样,即可获得20*20点阵。优选的,取样要均匀,比如对480*480点阵进行行取样时,将各行的第1、25、49、73...个像素点抽取出来作为样本,或者将各行的第2、26、50、74...个像素点抽取出来作为样本,至于是从第1个还是第2个像素点开始抽取,是由前面公式中的i0和j0决定的,其中i0决定行取样时从第几个像素点开始抽取,j0决定列取样时从第几个像素点开始抽取。
如图4所示,在上述图1中的步骤103所描述的流程的另一个具体实施例中,步骤103可以包括:
401、将所述公倍点阵等分为多个子点阵,所述子点阵的数目等于所述目标点阵的像素点数目,所述公倍点阵中的各所述子点阵与所述目标点阵中的各像素点具有一一对应关系;
402、根据所述公倍点阵内各像素点的着色信息获得各子点阵的着色比率,所述子点阵的着色比率为所述子点阵中着色的像素个数与不着色的像素个数的比率;
403、根据各子点阵的所述着色比率,以及所述目标点阵中的各像素点与所述公倍点阵中的各所述子点阵的一一对应关系,获得所述目标点阵内各像素点的着色信息,其中,当所述子点阵的着色比率小于预设的门限值时,与所述子点阵对应的目标点阵中的像素点不着色,当所述子点阵的着色比率大于或等于所述门限值时,与所述子点阵对应的目标点阵中的像素点着色。
仍然以将24*24点阵缩放至20*20点阵为例,首先将经放大所得的480*480点阵平均划分成20*20个子点阵,每个子点阵都是一个24*24点阵,然后依次分析各个子点阵,计算子点阵中需要着色的像素个数与不需要着色的像素个数的比率,如果需要着色的像素个数和总像素个数(这里为24*24)的比率大于某门限值(这里设为1/2),则表示在接下来把该子点阵用一个像素点替代时,该替代像素点是需要着色的,否则不需要着色。
另一方面,如图5所示,本发明实施例中还提供了一种点阵字缩放设备,该设备可以包括:
信息获取装置501,用于获取原始点阵字信息,所述原始点阵字信息包括基准点阵和所述基准点阵内各像素点的着色信息。
基准点阵放大装置502,用于将所述基准点阵整数倍放大至公倍点阵,其中,所述公倍点阵的长度为所述基准点阵长度与所述目标点阵长度的公倍数,宽度为所述基准点阵宽度与所述目标点阵宽度的公倍数。
该基准点阵放大装置502中可以设置一像素点放大模块,用于将所述基准点阵的各像素点分别放大至放大点阵,其中,所述放大点阵的长度为所述公倍点阵长度与所述基准点阵长度的商值,宽度为所述公倍点阵宽度与所述基准点阵宽度的商值。
优选的,还可以在像素点放大模块前设一计算模块,用于计算基准点阵长度与目标点阵长度的公倍数或最小公倍数,以及基准点阵宽度与目标点阵宽度的公倍数或最小公倍数。
公倍点阵着色判定装置503,用于根据所述基准点阵内各像素点的着色信息,获得所述公倍点阵内各像素点的着色信息。
该公倍点阵着色判定装置503中可以设置一着色信息复制模块,用于根据所述目标点阵中各像素点与所述基准点阵内各像素点的一一对应关系,获取抽样后所得所述目标点阵中各像素点的着色信息。
点阵缩小和目标点阵着色判定装置504,用于将所述公倍点阵整数倍缩小至目标点阵,并根据所述公倍点阵内各像素点的着色信息,获得所述目标点阵内各像素点的着色信息。
目标点阵字获取装置505,用于根据所述目标点阵及其内各像素点的着色信息,获得经缩放后的点阵字。
如图6所示,在上述图5中的点阵缩小和目标点阵着色判定装置504描述的装置结构的一个具体实施例中,该点阵缩小和目标点阵着色判定装置504可以包括:
抽样模块601,用于根据公式
或
对所述公倍点阵进行抽样,获得所述目标点阵,其中,u(i,j)为表征所述公倍点阵的函数,δ为抽样函数,m为所述公倍点阵长度除于所述目标点阵长度所得的商值,n为所述公倍点阵宽度除于所述目标点阵宽度所得的商值,i0和j0分别为表征在水平方向和垂直方向抽样时的抽样起始点,且i0≤m、j0≤n,L公和W公分别为所述公倍点阵的长度和宽度。
该抽样模块601可以包括一行取样单元6011和一列取样单元6012,以分别进行行取样和列取样。行取样和列取样的概念与本发明一种点阵字缩放方法中的解释一致。具体实施时,可以先将公倍点阵交由行取样单元6011进行行取样,再将经行取样后的变化了的公倍点阵交由列取样单元6012进行列取样,也可以将行取样单元6011和列取样单元6012的顺序调换,即先列取样再行取样。
着色模块602,用于根据所述目标点阵中各像素点与所述基准点阵内各像素点的一一对应关系,获取抽样后所得所述目标点阵中各像素点的着色信息。
如图7所示,在上述图5中的点阵缩小和目标点阵着色判定装置504描述的装置结构的另一个具体实施例中,该点阵缩小和目标点阵着色判定装置504可以包括:
公倍点阵分区模块701,用于将所述公倍点阵等分为多个子点阵,所述子点阵的数目等于所述目标点阵的像素点数目,所述公倍点阵中的各所述子点阵与所述目标点阵中的各像素点具有一一对应关系。
着色比率计算模块702,用于根据所述公倍点阵内各像素点的着色信息获得各子点阵的着色比率,所述子点阵的着色比率为所述子点阵中着色的像素个数与不着色的像素个数的比率。
目标点阵着色模块703,用于根据各子点阵的所述着色比率,以及所述目标点阵中的各像素点与所述公倍点阵中的各所述子点阵的一一对应关系,获得所述目标点阵内各像素点的着色信息,其中,当所述子点阵的着色比率小于预设的门限值时,与所述子点阵对应的目标点阵中的像素点不着色,当所述子点阵的着色比率大于或等于所述门限值时,与所述子点阵对应的目标点阵中的像素点着色。
可见,本发明提供的技术方案通过先将存储于点阵字字库中的基准点阵整倍放大为公倍点阵,再将放大所得的公倍点阵整倍缩小为最后想要得到的目标点阵,以实现缩放点阵字的目的,该方案既避开了运算复杂效率低下的矢量算法,又不必在字库中存储多种不同大小字形的点阵字,实现了以最少的字库以及最简单的算法满足对点阵字缩放的要求,这对于存储空间有限资源较紧张的系统如嵌入式系统有重要的意义。
以上所揭露的仅为本发明实施例中的一种较佳实施例,不能以此来限定权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。