专利名称:基于轮廓字型技术的离散字形生成方法
技术领域:
本发明属于字符信息处理领域,具体涉及一种基于轮廓字型技术的离散字形生成方法。
背景技术:
目前比较成熟的字形存储方式有点矩阵存储方式和轮廓存储方式。
点矩阵存储方式中国专利CN98120709.x“点矩阵字型产生系统”(
公开日2000年3月29日)公开了一种采用二进制的方式存储固定尺寸大小的点矩阵字形,实际是黑白位图的存储方式。对其中的黑色点采用“1”表示,白色点用“0”表示。如图1所示字形。此种方式适用于要求离散字形的场合。
轮廓存储方式采用一个或多个曲线轮廓来描述字形(U.S.Pat.N0.5,155,805),使用时,再采用相关的字体引擎进行尺寸缩放,填充转换为位图。此种方式,只需存储封闭轮廓上曲线的描述数据,具备无级平滑缩放而保持字体风格不变等优点。
对于有必要采用点矩阵字形的场合,现有的点矩阵字形技术存在如下不足之处不能改变点矩阵字形中各个点的外形轮廓;无法实现对各个点的轮廓进行缩放、错切、镜像等二维变换。
发明内容
本发明的目的在于提供一种采用基于轮廓字型技术的离散字形来模拟点矩阵字形的方法,该方法在保持点矩阵字形效果的同时,融合了轮廓字型技术的无级缩放能力等优点。
本发明的技术方案为基于轮廓字型技术的离散字形生成方法,包括离散字形数据存储过程和字形解释过程,其中,--离散字形数据存储过程(参见图4)首先定义字形编码,在全局字形表中存储任意一个或多个二维图形的轮廓数据,作为离散字形中的点的外形轮廓,在局部字形表表头处,存储用于当前离散字形中各离散点变换的二维变换矩阵,在表头的后面存储离散字形的各个点的坐标,用于定义具体的离散点;然后,将当前字形编码与局部字形表的表头起始位置按照一一对应关系存储在编码表中;--字形解释过程(参见图5)根据输入的字形编码,在编码表中找到匹配的字形编码,提取其局部字形表的起始位置,并读取全局字形表中的轮廓数据,根据存储在局部字形表中的变换矩阵,对轮廓数据进行变换,将变换后的轮廓数据进行扫描转换,填充为位图,并进行缓冲;然后,继续读取局部字形表中定义的离散字形各点的坐标,并将缓冲位图拷贝到对应坐标处,即可生成离散字形图。
进一步,所述的字形轮廓采用直线或三次贝塞尔曲线表示,轮廓数据中曲线的类型用标记符的方式区分。
再进一步,所述的字形轮廓为直线时,标记符为1,后面存储两对坐标分别表示其起始点和终止点的坐标;对于存在曲线的场合,采用三次贝塞尔曲线进行拟合,标记符为2表示此类曲线的开始,后面存储四对坐标分别表示其四个控制点;标记符为0的曲线类型,表示当前轮廓结束。
进一步,多个字形轮廓并存时,对各轮廓进行编号,作为全局数据使用。
进一步,存储在全局字形表中的离散点的轮廓数据,能够通过交换其编号的方式,来实现离散字形中的点的轮廓数据的对换。
进一步,通过设定存储在局部字形表表头处的二维变换矩阵中的M11,M12,M21,M22四个参数值,对字形进行缩放、旋转、镜像或错切变换。
在上述方法中,全局字形表中的轮廓数据可以为任意二维图形,并且可以定义任意多个,用于离散字形中点的外形轮廓的切换。通过此种方法,本发明实现了可以任意定义离散字形中离散点的外形轮廓。在局部字形表的表头存放一个二维变换矩阵,通过对此矩阵的适当配置,本发明实现了离散字形中各离散点轮廓的平移、缩放、旋转、错切、镜像等二维变换。
与常用的点矩阵字形方式相比,本发明采用轮廓字型技术来模拟点矩阵字形。除记录离散字形中各离散点的坐标数据之外,还添加了离散字形中用于定义点的几何外形的轮廓数据,以及对此部分数据进行操作的变换矩阵。在实现点矩阵字形效果的同时,融入了轮廓字形技术的平滑缩放能力等优点,并且可以实现点矩阵字形中点的几何外形的可变换性、可切换性及可扩展性。
图1为一个18×23的点矩阵字形的点矩阵图形;图2为一个轮廓字形的轮廓图形图;图3为本发明系统功能方块图;图4为本发明离散字形数据存储流程图;图5为本发明字形解释程序流程图;图6为全局字形表的数据结构示意图;图7为局部字形表的数据结构示意图;图8为编码表的数据结构示意图;图9为一个18×23的基于轮廓字型技术的方形点离散字形图;图10为一个18×23的基于轮廓字型技术的圆形点离散字形图。
具体实施例方式
下面结合附图和具体实施方式
对本发明作进一步详细地描述。
参照图2,一个轮廓字形的轮廓图形图,该字形由两个封闭轮廓组合而成,每个封闭轮廓用首尾相连的曲线来表示。图6为其存储数据结构示意图,每段具体采用直线或三次贝塞尔曲线来表示,对于曲线的类型,用标记符的方式来区分。以一个单位正方形字形为例,其存储方式如下1(0,0)(0,1)1(1,1)(1,0)0(0,0)。其中1代表当前曲线为直线,两对坐标分别表示其起始点和终止点的坐标。对于存在曲线的场合,采用三次贝塞尔曲线进行拟合,用2表示此类曲线的开始,后面存储四对坐标分别表示其四个控制点。当碰到0开头的曲线类型时,当前轮廓结束。
本发明存储的导形可以为任意图形,按照图6所示的数据结构将其存储在全局字形表中,对于多个并存的情况,对其进行编号,作为全局数据来使用。其示例数据如下所示11(0,0)(0,1)1(1,1)(1,0)0(0,0)……n1(x10,y10)(x11,y11)2(x20,y20)(x21,y21)(x22,y22)(x23,y23)..0(0,0)其中,第一个数字代表当前轮廓的编号,后面存储的是其轮廓定义数据。此部分的数据将用于表示离散字形中的点。
如图7所示,局部字形表表头为当前离散字形的变换矩阵,用于对当前使用的全局字形进行变换。根据变换矩阵中的M11,M12,M21,M22四个参数值,对字形进行缩放、旋转、镜像、错切等变换;Dx,Dy分别为水平和竖直方向的移动量,用于对离散字形中各个点进行平移变换。假设当前离散字形中的点采用圆形点表示,若设定变换矩阵如下M11=0.4;M22=0.8;则表示将当前离散字形中所有的圆形点水平,垂直方向分别缩至原图形的0.4倍和0.8倍,而且保持各圆形点的中心位置不变,一般进行缩放变换时,应确保缩放因子为大于零的实数;若设定Dx=2,Dy=3,则表示将当前离散字形中各圆形点沿水平方向向右移动2个单位,再沿竖直方向向下移动3个单位,若水平方向移动量为负值表示沿水平方向向左移动,竖直方向移动量为负值表示沿竖直方向向上移动;若设定M12=sin(30),M11=cos(30),M21=-s in(30),M22=cos(30),则表示将当前离散字形中各圆形点绕其中心沿逆时针方向旋转30度,旋转角度为负值表示沿顺时针方向旋转;若设定M11=-1,则表示将当前离散字形中各圆形点沿其水平方向的中心线进行镜像;若设定M22=-1,则表示将当前离散字形中各圆形点沿其竖直方向的中心线进行镜像;若设定M21=2,则表示将当前离散字形中各圆形点本身进行错切变换,保持圆形点本身各点竖直方向坐标不变,水平方向向右移动2各单位,其值为负值时表示沿水平方向向左移动;同样,若设定M12=2,则表示将当前离散字形中各圆形点本身进行错切变换,保持圆形点本身各点水平方向坐标不变,竖直方向向下移动2个单位,其值为负值时表示沿竖直方向向上移动。以上定义的变换为基本的二维变换,在此基础上,对于离散字形的变换,可以设置复合变换矩阵,用于实现多于一次以上的复合变换,复合变换矩阵为各次变换矩阵的顺序乘积,其变换的结果是顺序进行各次变换的综合效果。
离散字形表接下来的数据为各个离散点的坐标数据,采用图7所示的数据结构存储在变换矩阵后面。其中,变量ContourNumber表示构成当前字形的封闭轮廓数目,Contour i表示第i个封闭轮廓的定义数据,采用图6所示数据结构存储。
一个实际的局部字形表数据如下0.4,0,0,0.8,0,0202,32,4…15,15其中初始行存储用于当前离散字形每个离散点的二维变换矩阵;20表示当前字形由20个离散点组成;其后的数据用于记录每个离散点的坐标。
编码表是根据当前局部字形起始位置,建立的字符编码与字形数据存储位置间的对应关系。采用图8所示格式进行存储,其中,左栏的变量Encoding表示字形编码,右栏的变量Offset表示字形数据存储位置,即相对于文件头的偏移量。
对于存储在全局字形表中的离散点的轮廓数据,可以通过交换其编号的方式,来实现离散字形中的点的轮廓数据的对换。假设当前全局字形表的数据按照如下方式组织0-正方形;1-正三角形;2-倒正三角形;3-菱形;4-圆形等。缺省状态下字形解释程序使用编号为0的点的轮廓数据。如果要采用菱形的轮廓数据来表示离散字形中的点,则可以通过对换正方形和菱形的编号来实现。通过此方式,本发明可以实现离散字形中的点的外形轮廓的可切换性及可扩展性。
当使用基于轮廓方式存储的离散字形时,参见图5,字形解释程序首先根据字符编码,查找编码表,然后根据编码表中记录的偏移量定位到局部字形表,读取全局字形表中编号为0的点的轮廓数据,然后根据局部字形表中的变换矩阵,对其进行变换,再通过扫描转换,填充算法将其转换为位图并进行缓存,接下来读取局部字形表中各离散点的坐标数据,并将缓冲位图拷贝到各点的坐标处,直至当前局部字形表数据处理完毕,便生成了给定编码的离散字形。
参见图9,当前全局字形表中编号为0的轮廓数据定义为正方形,局部字形数据中变换矩阵为单位矩阵,当编码进入字形解释程序后,程序会根据全局字形表的轮廓数据及局部变换字形表中的单位矩阵,将变换后的点的轮廓数据,通过扫描转换及填充(为方便看到轮廓曲线,设置当前系统画刷为白色),得到当前离散字形的点轮廓填充位图,缓冲至内存,然后根据局部字形表中记录的坐标数据进行位图的拷贝,便可得到如图9所示的基于轮廓字型技术的离散字形。
图10是一个采用圆点的离散字形图。其中设置其局部字形表中二维变换矩阵如下M11=1.0;M22=1.0;字形解释程序中设置当前系统画刷为白色。
与现有的点阵存储方式相比,本发明提出的方法采用轮廓字型技术来模拟点矩阵字形。数据中添加了用于定义离散点几何外形的轮廓数据,以及对此部分数据进行操作的变换矩阵。在实现点矩阵字形效果的同时,实现了点矩阵字形中的点的几何外形的可变换性,可切换性及可扩展性。
本发明所述的方法并不限于具体实施方式
中所述的实施例,本领域技术人员根据本发明的技术方案得出其他的实施方式,同样属于本发明的技术创新范围。
权利要求
1.一种基于轮廓字型技术的离散字形生成方法,包括离散字形数据存储过程和字形解释过程,其特征在于--离散字形数据存储过程首先定义字形编码,在全局字形表中存储任意一个或多个二维图形的轮廓数据,作为离散字形中的点的外形轮廓,在局部字形表表头处,存储用于当前离散字形中各离散点变换的二维变换矩阵,在表头的后面存储离散字形的各个点的坐标,用于定义具体的离散点;然后,将当前字形编码与局部字形表的表头起始位置按照一一对应关系存储在编码表中;--字形解释过程根据输入的字形编码,在编码表中找到匹配的字形编码,提取其局部字形表的起始位置,并读取全局字形表中的轮廓数据,根据存储在局部字形表中的变换矩阵,对轮廓数据进行变换,将变换后的轮廓数据进行扫描转换,填充为位图,并进行缓冲;然后,继续读取局部字形表中定义的离散字形各点的坐标,并将缓冲位图拷贝到对应坐标处,即可生成离散字形图。
2.根据权利要求1所述的基于轮廓字型技术的离散字形生成方法,其特征在于所述的字形轮廓采用直线或三次贝塞尔曲线表示,轮廓数据中曲线的类型用标记符的方式区分。
3.根据权利要求2所述的基于轮廓字型技术的离散字形生成方法,其特征在于所述的字形轮廓为直线时,标记符为1,后面存储两对坐标分别表示其起始点和终止点的坐标;对于存在曲线的场合,采用三次贝塞尔曲线进行拟合,标记符为2表示此类曲线的开始,后面存储四对坐标分别表示其四个控制点;标记符为0的曲线类型,表示当前轮廓结束。
4.根据权利要求1、2或3所述的基于轮廓字型技术的离散字形生成方法,其特征在于多个字形轮廓并存时,对各轮廓进行编号,作为全局数据使用。
5.根据权利要求4所述的基于轮廓字型技术的离散字形生成方法,其特征在于存储在全局字形表中的离散点的轮廓数据,能够通过交换其编号的方式,来实现离散字形中的点的轮廓数据的对换。
6.根据权利要求1所述的基于轮廓字型技术的离散字形生成方法,其特征在于通过设定存储在局部字形表表头处的二维变换矩阵中的M11,M12,M21,M22四个参数值,对字形进行缩放、旋转、镜像或错切变换。
全文摘要
本发明属于字符信息处理领域,具体涉及一种采用基于轮廓字型技术的离散字形来模拟点矩阵字形的方法。该方法将离散字形中离散点的几何轮廓数据单独存储,对于每个离散字形,存储一个变换矩阵及各离散点的坐标,字形解释程序根据离散字形数据,得到相应的离散字形。采用本发明所述的方法,不仅可以实现离散字形中的点的外形轮廓的可变性,而且实现了点的轮廓的平移、缩放、旋转、错切、镜像等二维变换。
文档编号G06F17/22GK1862526SQ200610089359
公开日2006年11月15日 申请日期2006年6月21日 优先权日2006年6月21日
发明者唐英敏, 李明, 高志青 申请人:北京大学, 北京北大方正电子有限公司