首页 / 专利库 / 引擎 / 发动机 / 热机 / 内燃机 / 曲轴 / 曲拐 / 嵌入式应用以笔划中心线为基准描述的曲线字库

嵌入式应用以笔划中心线为基准描述的曲线字库

阅读:435发布:2023-02-01

专利汇可以提供嵌入式应用以笔划中心线为基准描述的曲线字库专利检索,专利查询,专利分析的服务。并且嵌入式应用以笔划中心线为基准描述的曲线字库是一种用全新的技术所自定义的数据格式和自带还原 算法 解释器的可挂接到任何计算机 操作系统 上使用的多文种多字体字库产品,字形的底层所使用的笔划是用其中心线为 基础 描述,引入笔划厚度和笔划 曲率 变化参数,从而可使字形无限精美,字库和还原程序所需要的存储容量极小、还原速度快且字形优美,其字库芯片可直接嵌入到CPU中而使操作系统直接中文化并实现零开销,特别适应嵌入式的应用,因而该产品的应用前景非常广阔。,下面是嵌入式应用以笔划中心线为基准描述的曲线字库专利的具体信息内容。

一种嵌入式应用以笔划中心线为基准描述的曲线字库,其特征在于:
1.一种基于笔划中心线的笔划库,每一个笔划根据其形状分为若干笔划段, 分别为笔划头段、正常段、拐段和为尾段,正常段和拐段可以有若干段,先 用直线或贝塞尔曲线描述该笔划的中心线的各笔划段,又以该笔划中心线各 段的关健点为各笔划段的控制点,各笔划段以各段控制点为基准的相对位置 描述各笔划段的轮廓曲线;笔划数据为不等长,用尾段数据位标示该笔划结 束;
笔划库的数据格式为:
字体所含笔划总数:占2个字节;
笔划头数据:笔划总数*4得到的字节,每个笔划占用4个字节,前3 个字节为各笔划数据位置指针,后一个字节描述曲率变化的占4位的方式和 占4位的段号;
笔划数据:含笔划各段中心线数据、笔划各段轮廓线数据。
每种不同的字体笔划数不同,一般在1000个左右,每个笔划数据的长 度一般在20~100字节左右。
2.一种由笔划直接构造的字库,其数据格式为:
相对于文件头的笔划库数据起始位置:4字节;
笔划库所含汉字或字符,总数:4字节;
汉字或字符索引表:4乘所含汉字或字符总数得到的字节,每个字占4 字节,前一个字节为该字所用笔划数,后3个字节为构成该汉字的各笔划的 描述参数数据的位置指针;
参数数据:8*形成该汉字或字符的笔划数得到的字节,每个笔划参数数 据为8个字节,分别为:占2字节笔划号、占1字节厚度系数、占2字节笔 划位置、占12位的笔划放大缩小系数、占12位的笔划曲率变化增量;
笔划库:如前1中所描述笔划库数据格式;
3.一种由笔划构造的汉字部件库,其数据格式为:
部件库所含最多笔数构造的部件的笔划:4字节,一般为20~29,即一 个部件最多由20~29个笔划构成,部件的排列是按1笔划部件、2笔划部件、 直到20~29笔划部件依次排列;
N笔划部件索引表:设最多笔划数为N,各笔划数所构造的部件数据的 位置指针占4*N字节,每种笔划数部件位置占4字节,分别为1笔划部件 位置、2笔划部件位置直到N笔划部件位置,每笔划数部件有若干个,从1 号到到该笔划数部件总数为止排序,每个2笔划部件参数数据占2*8个字节, 每个3笔划部件参数数据占3*8个字节,依此类推;
参数数据:8*形成该部件的笔划数得到的字节,每个笔划参数数据为8 个字节,分别为:占2字节的笔划号、占2字节的厚度系数、占2字节的笔 划位置、占12字节的笔划放大缩小系数、占12字节的笔划曲率变化增量;
4.一种由部件生成的汉字库,其数据格式为:
版本信息:4字节,前2字节为公司标志简称,第三字节为字体标志, 第四字节字符集标志;
字参数区起始位置:4字节;
部件参数区起始位置:4字节;
笔划数据区起始位置:4字节;
字索引数据表:4*总字数加1的和得到的字节,第一个4字节为总字数, 以后每4字节表示每个字的索引,其中前3个字节表示字参数数据位置,后 1字节为构成该字的部件数;
字参数数据:描述构成字的每一个部件的参数占6个字节,分别为占 11位的部件号、该部件所含占5位的笔划数、占2字节的部件位置、占12 位的部件缩小放大系数、占6位的部件的厚度系数;
部件参数数据:参见3;笔划库:参见1;
5.多字体紧凑共享格式字库,各种字体构成每一个字的部件号是相同的,
各种字体构成部件的笔划号是相同的,这一部分数据只要在一种基本字体
中描述,而其他字体共享这部分数据,其数据格式描述如下:
  基本字体的格式已在一、4中描述;
  其他字体的数据格式描述如下:  
    字参数区起始位置:4字节;
    部件参数区起始位置:4字节;
    笔划数据区起始位置:4字节;
字索引数据表:4*(总字数加1的和得到的字节,第一个4字节为总字 数,以后每4字节表示每个字的索引,其中前3个字节表示字参数数据位置, 后1字节为构成该字的部件数;
字参数数据:描述构成字的每一个部件的参数占4个字节,分别为、占 2字节的部件位置、占12位的部件缩小放大系数、占6位的部件的厚度系 数;
部件参数数据:参见3,但去掉笔划号;笔划库:参见1;
6.以笔划中心线为基准描述的曲线字库之笔划还原解释器;
7.以笔划中心线为基准描述的曲线字库之笔划组字还原解释器;
8.以笔划中心线为基准描述的曲线字库之笔划组部件还原解释器;
9.以笔划中心线为基准描述的曲线字库之部件组字还原解释器;
10.以笔划中心线为基准描述的曲线字库之多字体部分共享数据的还原解释 器。

说明书全文

技术领域:

发明涉及一种由数字数据处理,尤其涉及一种用于将所要处理的数据转变 成计算机能够处理的数据形式的字库,以用于计算机汉字信息处理。

背景技术:

字库是计算机操作系统的重要组成部分之一,因为汉字数量大,中文字符集 大,字库则是中文信息处理的基础,在计算机上输入输出汉字、字符依赖字库。

传统的字库技术有点阵字库、矢量字库和轮廓曲线字库。

点阵字库有制作简单、还原解释程序简单等优点,但其缺点是不能放大、缩 小(放大、缩小效果奇差),而且,大点阵字库的容量成几何倍数增加,一个应 用需要多种不同尺寸规格的字库,所占的存储容量非常大,因而,点阵字库只是 在早期的计算机系统和一些用字少、输出字形质量要求不高的简单的嵌入式专用 设备上使用。

矢量字库和轮廓曲线字库是目前计算机使用的字库的主流,主要有TTF格式 字库和POSTSCRIPT格式字库,目前在PC机市场上大部分使用这两种字库,其优 点是技术成熟、字形优美、可放大缩小、可满足在PC以上的计算机上使用;其 缺点是:数据格式复杂、字形还原解释器复杂、还原速度较慢、字体所占的存储 容量大,不能满足其在嵌入式系统的上使用,且这两种格式的字库都是美国公司 发明,其解释器不仅攒取我国大量金钱,而且妨碍我国对中文信息处理技术发展, 我国在汉字字库技术领域受制于外国是不正常的。

发明内容:

首先,现在市场上还没有一种能够满足嵌入式系统使用的轮廓曲线字库,这 是因为嵌入式系统一般存储容量小,增加存储器势必增加成本,一种GB18030 字体的TTF格式字库需要20M左右的存储空间,用4种要80M,而现在高档的嵌 入式系统一般只有16M的存储空间,操作系统要占用一部分,给应用要留一部分, 就根本不能放汉字字库,目前许多较高档的西文PDA或手机都因没有中文化不能 投入到中国使用,因而,目前较高挡的中文嵌入式系统就找不到合适的技术解决 方案,因而,研制一个字形优美、可放大缩小、数据格式清晰、还原解释器清晰、 字形还原速度快,特别是在上述前提下所占的存储容量小特别适于中文嵌入式系 统的新型字库就非常必要了。

另外,我们必须研制一种中国自定义格式的字库,自行研制其中国自主版权 的字形解释器,并将使其成为国家标准,形成外国公司的嵌入式产品进入中国的 技术屏障,保障我国在嵌入式系统的中文信息处理应用技术领域的领先地位。 本发明的实现过程:

本发明首先使用标准C编程在PC机的WINDOWS操作系统上实现,然后又已 在嵌入式操作系统NUCLEUS上实现并固化在存储器上(试验产品),并在不久的 将来将其做成字库芯片和字库解释器芯片并固化在嵌入式CPU中。

本字库全名为“以笔划中心线为基准描述字的数据格式的系列字库产品”, 简称“嵌入式应用ZGX曲线字库”。为简便起见即用“ZGX”代替“以笔划中心线 为基准描述的”。

1.一种基于笔划中心线的笔划库,每一个笔划根据其形状分为若干笔划段,

分别为笔划头段、正常段、拐段和为尾段,正常段和拐段可以有若干段,先

用直线或贝塞尔曲线描述该笔划的中心线的各笔划段,又以该笔划中心线各

段的关健点为各笔划段的控制点,各笔划段以各段控制点为基准的相对位置

描述各笔划段的轮廓曲线;笔划数据为不等长,用尾段数据位标示该笔划结

束;

    笔划库的数据格式为:字体所含笔划总数:占2个字节;

    笔划头数据:笔划总数*4得到的字节,每个笔划占用4个字节,前3

个字节为各笔划数据位置指针,后一个字节描述曲率变化的占4位的方式和

占4位的段号;

    笔划数据:含笔划各段中心线数据、笔划各段轮廓线数据。

    每种不同的字体笔划数不同,一般在1000个左右,每个笔划数据的长

度一般在20~100字节左右。

2.一种由笔划直接构造的字库,其数据格式为:

    相对于文件头的笔划库数据起始位置:4字节;

    笔划库所含汉字或字符,总数:4字节;

    汉字或字符索引表:4乘所含汉字或字符总数得到的字节,每个字占4

字节,前一个字节为该字所用笔划数,后3个字节为构成该汉字的各笔划的

描述参数数据的位置指针;

    参数数据:8*形成该汉字或字符的笔划数得到的字节,每个笔划参数数

据为8个字节,分别为:占2字节笔划号、占1字节厚度系数、占2字节笔

划位置、占12位的笔划放大缩小系数、占12位的笔划曲率变化增量;

    笔划库:如前1中所描述笔划库数据格式;

3.一种由笔划构造的汉字部件库,其数据格式为:

    部件库所含最多笔数构造的部件的笔划:4字节,一般为20~29,即一

个部件最多由20~29个笔划构成,部件的排列是按1笔划部件、2笔划部件、

直到20~29笔划部件依次排列;

    N笔划部件索引表:设最多笔划数为N,各笔划数所构造的部件数据的

位置指针占4*N字节,每种笔划数部件位置占4字节,分别为1笔划部件

位置、2笔划部件位置直到N笔划部件位置,每笔划数部件有若干个,从1

号到到该笔划数部件总数为止排序,每个2笔划部件参数数据占2*8个字节,

每个3笔划部件参数数据占3*8个字节,依此类推;

    参数数据:8*形成该部件的笔划数得到的字节,每个笔划参数数据为8

个字节,分别为:占2字节的笔划号、占2字节的厚度系数、占2字节的笔

划位置、占12字节的笔划放大缩小系数、占12字节的笔划曲率变化增量;

4.一种由部件生成的汉字库,其数据格式为:

    版本信息:4字节,前2字节为公司标志简称,第三字节为字体标志,

第四字节字符集标志;

    字参数区起始位置:4字节;

    部件参数区起始位置:4字节;

    笔划数据区起始位置:4字节;

    字索引数据表:4*总字数加1的和得到的字节,第一个4字节为总字数,

以后每4字节表示每个字的索引,其中前3个字节表示字参数数据位置,后

1字节为构成该字的部件数;

    字参数数据:描述构成字的每一个部件的参数占6个字节,分别为占

11位的部件号、该部件所含占5位的笔划数、占2字节的部件位置、占12

位的部件缩小放大系数、占6位的部件的厚度系数;

    部件参数数据:参见3;笔划库:参见1;

5.多字体紧凑共享格式字库,各种字体构成每一个字的部件号是相同的,

各种字体构成部件的笔划号是相同的,这一部分数据只要在一种基本字体

中描述,而其他字体共享这部分数据,其数据格式描述如下:

  基本字体的格式已在一、4中描述;

  其他字体的数据格式描述如下:

    字参数区起始位置:4字节;

    部件参数区起始位置:4字节;

    笔划数据区起始位置:4字节;

    字索引数据表:4*(总字数加1的和得到的字节,第一个4字节为总字

数,以后每4字节表示每个字的索引,其中前3个字节表示字参数数据位置,

后1字节为构成该字的部件数;

    字参数数据:描述构成字的每一个部件的参数占4个字节,分别为、占

2字节的部件位置、占12位的部件缩小放大系数、占6位的部件的厚度系

数;

    部件参数数据:参见3,但去掉笔划号;笔划库:参见1;

6.ZGX字库之笔划还原解释器(程序模);

7.ZGX字库之笔划组字还原解释器(接口应用程序模块);

8.ZGX字库之笔划组部件还原解释器(程序模块);

9.ZGX字库之部件组字还原解释器(接口应用程序模块);

10.ZGX字库之多字体部分共享数据的还原解释器(接口应用程序模块)。 本发明与现有技术相比的优点:

本发明与现有技术相比的优点在于:在保证字形的精美的前提下做到最省存 储容量,一种字体的GB18030字库(含27590个汉字和1136个半全角字符, 共28726个编码)的标准格式字库文件为1.1M字节(而目前市场上使用的TTF 格式字库20M字节左右);本字库一种字体的紧凑格式占800K字节;四种字体 共享紧凑格式字库:宋体为800K,仿宋、黑体、楷体各为600K,四种字体共为 2600K字节(2.6M);七种字体为4.5M字节(而使用TTF格式需要超过100M); 本发明的字形解释器清晰,特别优化,所占存储少,执行代码仅40K字节左右, 还原速度快;本发明使用标准C编程,核心模块全部使用整数运算,易于与任何 计算机操作系统接口;本发明字库除可任意缩放外,还增加了可无级改变字体笔 划粗细的功能,这是现有字库做不到的;特别在存储器资源有限的嵌入式应用中 本发明技术可显示无可比拟的优越性,为较高挡的中文嵌入式系统就找到了合适 的不可替代的技术解决方案;因而本发明应用前景非常广阔。

附图说明:

图1:主程序流程图

图2:将字库数据文件读入内存数组流程图,

图3:从汉字字符的国际码或Unicode编码转换到ZGX字库的字号(下

     列框图以国际码为例),

图4:根据ZGX字库字号画笔划字流程图,

图5:画笔划字流程图,

图6:贝塞尔曲线递归调用程序,

图7:用一条或多条贝塞尔曲线画一笔划数的子程序,

图8:用一条或多条贝塞尔直线画一笔划数的子程序,

图9:画直线转换子程序,

图10:画直线子程序,

图11:在内存缓冲区中画点位图中的点的子程序,

图12:填充算法子程序,

图13:建立边的分类表(E表)子程序,

图14:将该边的分类表(E表)中的某一项的所有边插入AE活化边表中,

      并按cxBotoom升序排列,

图15:笔划数据文件数据格式,

图16:笔划数据格式,

图17:笔划中心线各段控制字数据格式,

图18:笔划轮廓线各段控制字数据格式,

图19:部件数据文件数据格式,

图20:笔划生成字的数据文件数据格式,

图21:笔划结构参数数据块数据格式,

图22:部件生成字索引表,

图23:部件生成字字参数数据格式,

图24:部件生成字部件参数数据格式,

图25:部件生成字笔划数据格式,

图26:多字体部分共享部件构字的字参数数据格式,

图27:多字体部分共享部件构字的部件参数数据格式,

图28:多字体部分共享部件构字的的笔划数据格式,

图29:屏幕坐标系

图30:字坐标系,

图31:部件坐标系,

图32:笔划坐标系。

具体实施方式:

按照图1-32所示来描述本发明的实施: 一、概述

本技术属计算机汉字信息处理范畴。本技术首先自定义一种独特的曲线轮廓 字库数据格式,这种数据格式是依据本发明所定义的笔划和部件;然后根据这种 数据格式使用解释程序还原所需要的精美的汉字字形;本发明的特点在于:在保 证字形的精美的前提下做到最省存储容量,一种字体的GB18030字库(含27590 个汉字和1136个半角全角字符,共28726个编码)的标准格式字库文件为1.1M 字节(而目前市场上使用的TTF格式字库超过15M);紧凑格式为800K;四种 字体共享紧凑格式字库:宋体为800K,仿宋、黑体、楷体各为600K,四种字体 共为2600K(2.6M);七种字体为4.5M(而使用TTF格式需要超过100M)。特 别在存储器资源有限的嵌入式应用中本发明技术可显示无可比拟的优越性,因而 应用前景非常广阔。

ZGX字库使用的术语定义如下:(ZGX代表以笔划中心线为基准描述的,

                             以下同)

1.ZGX字库笔划

ZGX字库笔划是构成字的最基本的元素。不同的笔划用笔划号来标示,汉 字的笔划有横、竖、撇、捺、点等五大类,约30多种,但在ZGX字库上根据不 同的需要,要制作1000多个不同的笔划。笔划由笔划中心线、笔划段构成,各 笔划段用轮廓线描述,最后组成笔划的外轮廓闭合曲线。

笔划中心线是笔划的骨架线,它包括笔划各段的控制点,本身又由直线和贝 塞尔曲线构成。

笔划段分为头段、正常段(主干段)、拐段、尾段,各段以笔划中心线定义 的控制点为基准用相对于控制点的坐标来描述其各段的轮廓线,轮廓线由直线和 贝塞尔曲线构成。

笔划段段号是指笔划正常段所属的段号,从0到最大的段号。

笔划段曲率变化方式是指头段、尾段、某正常段随方式的不同,其控制点坐 标位置会发生变化。曲率变化方式有15种,从1到15。

曲变段号和曲变方式将在笔划库的索引文件中给出。

2.ZGX字库部件

ZGX字库部件是由若干笔划构成的,以所构成的笔划数来分类成:1笔划部 件、2笔划部件、3笔划部件...最多为31笔划部件;部件由元素(指几笔划部件) 和在该元中的部件号来标示。在多字体字库产品中这些数据是可以共享的。

组成部件的各笔划的参数数据由笔划号、笔划厚度系数、笔划中心在部件坐 标系下的坐标、笔划在x方向和y方向上的缩放系数、笔划在x方向和y方向上 的曲率变化增量构成。

组成部件的笔划号在多字体字库产品中这些数据是可以共享的。

笔划中心在部件坐标系下的坐标限制在-128到+127,用一个字节表示,这 些数据是在定制字库产品时确定的。 笔划厚度系数作用于笔划的轮廓曲线,厚度系数的不同会使笔划有不同的粗细, 也会改变特殊段,从而改变字体的修饰。

笔划在x方向和y方向上的缩放系数只作用于笔划中心线的各控制点,而不 影响笔划的粗细,从而保障了字体笔划粗细的一致性;笔划在x方向和y方向上 的缩放系数也是在定制字库产品时确定的,限制在0到255,各用一个字节表示, 128表示缩放系数为1倍;在紧凑格式中也可以用6位表示,限制在32到95之 间,存放格式为上述数字减32,故在0到63之间,64表示缩放系数为1倍。

笔划在x方向和y方向上的曲率变化增量是指笔划头段、尾段和某正常段的 曲率变化,曲率变化方式有15种,分别同时作用于头、尾和正常段中的一段或 两段(最多两段),例如:头段的x坐标增量或尾段的y坐标增量是其中一种曲 变方式,某正常段曲率x坐标增量和曲率y坐标增量也是其中一种曲率变化方式。 前者解决复合笔划(例如:横折)的横段和折段的不同比例的问题,后者解决笔 划在不同的部件中曲率不同的问题。引入曲率变化增量使ZGX字库的字形可以 完全精确的逼近任意字体模板,从而保证了字库字形的精确和精美。曲率变化增 量在-128到127之间,各用一个字节表示,在紧凑格式中曲率变化增量可以用6 位格式表示,因为曲率变化增量一般较小。

3.ZGX字库的字

ZGX字库是用字号来标示,字号从1到N(N可以是一个长整数),所以本字 库对字的数目是没有限制,可以做成超大字库。ZGX字库可以以Unicode编码 排序,也可以以国标(GB2312、GBK、GB18030)编码来排序。

ZGX字库的字是可以由若干部件构成,也可以直接由若干笔划构成,前者 称为部件构字,后者称为笔划构字。

笔划构字是指字由若干个笔划构成,其参数数据由构成该字的每个笔划的笔 划号、笔划厚度、笔划中心在字坐标系下的坐标、笔划在x方向和y方向的缩放 系数、笔划在x方向和y方向上的曲率变化增量构成。笔划构字的各参数说明同 一、2中ZGX字库部件的描述。

部件构字是指字由若干个部件构成,其参数数据由组成该字的各部件所在的 元数(几笔划部件)和部件号、该部件中心坐标在字坐标系下的坐标、该部件在 x方向和y方向的缩放系数、该部件的厚度系数。而部件又由笔划构成,於一、 2中所述。

组成该字的各部件所在的元数(几笔划部件)和部件号在多字体字库产品中 是可以共享的数据,只要在一种字体的字库文件里存在就可以了。

部件中心坐标在字坐标系下的坐标,该坐标是由该部件的结构位置号所确定 的,结构位置号有31种,例如:左右结构、上下结构、包围结构等,这些是在 定制字库产品时所确定的。

部件在x方向和y方向的缩放系数限定在0到255之间,各用一个字节表示, 在紧凑格式中用0到63表示32到95,用6位表示,缩放系数64表示为1倍。

4.字生成外部调用参数

在设备坐标系下生成字,使用的参数如下:字的字体号、字的国标编码(或 Unicode编码)、字的长度(以像素点为单位)、字的宽度(以像素点为单位)、 字的厚度系数、字的前景色、字的显示方式(字的旋转、加粗、倾斜、填充方式 等);在缓冲区返回字的点位图数据。

字生成的外部调用参数中字的长度、宽度、厚度数据原则上没有限制,这就 意味着一种字体可以以任意长度、宽度、厚度生成长体字、扁体字和任意粗细的 字,一种字体可以作为数种字体使用。

5.ZGX字库产品的技术指标

ZGX字库在保证字形精确和精美的前提下,可以最大限度的节省存储容量 和加快还原速度。

一种字体的GB18030字库(含27590个汉字和1136个半角全角字符,共 28726个编码)的标准格式字库文件为1.1M字节(TTF格式字库超过15M);紧 凑格式为800K;四种字体共享紧凑格式字库:宋体为800K,仿宋、黑体、楷体 各为600K,四种字体共为2600K(2.6M);七种字体为4.5M。

ZGX字库的还原算法优于TTF字库,因为填充针对笔划进行,而不是整字, 填充速度整体要快,加上ZGX字库索引简单直接,数学运算均采用整数运算并 进行了全面优化。 二、ZGX字库数据格式 1.笔划数据文件:见附图15。

笔划数据格式:见附图16。

笔划中心线各段控制字数据格式,用一字节表示,该字节的位的约定如下: 见附图17。

笔划中心线各段数据:头段坐标(2字节),段控制字(1字节),正常段数 据(2×z00字节)…,尾段控制字。

笔划轮廓线各段数据:

笔划轮廓线各段控制字数据格式,用一字节表示,该字节的位的约定如下: 见附图18。

笔划轮廓线各段数据:段控制字(1字节),第一边轮廓线坐标增量(2字节) 第二边轮廓线坐标增量(2字节),头段其它点坐标(2×tqy字节),正常段数据 (含第一、二边轮廓线各点坐标4×z00字节);拐段控制字(1字节),第一轮廓 线坐标增量(2字节),第二轮廓线坐标增量(2字节),拐段其它点坐标(2×tqy 字节),正常段数据(含第一、二轮廓线各点坐标4×z00字节);…尾段控制字, 尾段其它点坐标(2×tqy字节)。 2.部件数据文件:见附图19。 3.笔划生成字的数据文件

前四字节为笔划数据起始位置(相对于文件头);

次四个字节为汉字(字符)总数;

接下来每个汉字参数数据索引占四个字节,按一定编码顺序排列,前一个字 节为该汉字(字符)所含的笔划数,后三字节为笔划数据在笔划参数文件中的 位置,见附图20。

该数据块长度为4*汉字(字符)总数; 接下来是笔划结构参数数据块:每个笔划占八个字节,第一、二个字节为该笔划 的笔划号,第三字节为该笔划的厚度,其后五字节分别为该笔划的X、Y、SX、SY、 QX、QY如附图21所示。

该数据块存储容量为:所有汉字(字符)所用笔划总数*8个字节;

接下来为笔划生成数据块,组成如下:

总笔划数:2字节,

笔划数据索引:4*总笔划数,笔划数据。(如附图15笔划数据文件紧凑格式) 4.部件生成字数据格式

基本字体文件主要由以下部分组成:索引表、字参数、部件参数、笔划数据。 各部分的详细数据格式描述如下:

索引表:见附图22。

字参数数据:见附图23。

部件参数数据:见附图24。

笔划数据:见附图25。 5.多字体部分共享部件构字格式

其他字体文件主要由以下部分组成:索引表、字参数、部件参数、笔划数据。 各部分的详细数据格式描述如下:

索引表:见附图22。

字参数数据:见附图26。

部件参数数据:见附图27。

笔划数据:见附图28。 三、数学模型和解释程序 1.坐标系

ZGX字库使用了以下各种坐标系:设备坐标系(对于显示打印或其它设备)、 字坐标系、部件坐标系、笔划坐标系。 (1)设备坐标系

以计算机显示器为例:屏幕坐标系定义如附图29:

屏幕左上角坐标原点是(0,0),向下为y轴,向右为x轴。VGA显示方式 分辩为640×480,因此屏幕右下角坐标为(639,479)。 (2)字坐标系

如附图30:x1o1y1为坐标系,图中xoy坐标系是设备坐标系。在设备坐标系 下为字的中心坐标。

显示一个字,只要给出字号、x方向和y方向的缩放系数(基准字为256×256 是分辨率)及字中心坐标o1(x0,y0)(该点为字坐标系原点o1),就可以在屏幕的 给定位置显示该字。 (3)部件坐标系

如附图31:x2o2y2为部件坐标系;它是相对于字坐标下相对坐标系;o2为 一字元的坐标中心;每一字元有一个相对与字坐标系下的部件坐标系;显示一个 字是通过显示若干部件实现的;显示该字只要从字结构文件中取出各部件号和各 部件在x,y方向的缩放倍数及o2点在坐标系的相对坐标(x10,y10)。 (4)笔划坐标系

如附图32:x3o3y3为笔划坐标系;笔划坐标系是相对于部件坐标系x2oy2的 相对坐标系。生成一个部件是通过显示若干笔划实现的;生成一个部件要从部件 结构文件中取出;各笔划号及各笔划在x,y方向缩放倍数;

及o3点在x2o2y2坐标系下的相对坐标(x20,y20)即可实现。同样,每一个笔划 显示都有一个笔划坐标系。

如何画笔划呢,就是根据在笔划坐标下,该笔划的坐标点数及曲线拟和参数 (根据相应笔划号从笔划文件中取出)采用填充算法获得。 (5)贝塞尔二次曲线拟合

如附图32:短撇分为1、2、3段,每段都用一个贝塞尔二次曲线拟合。

第一段使用①、②、③点坐标;其中第②段是第①、③段的切线的交点。

第二段使用③、④、⑤点坐标;其中第④是为第③、⑤的切线交点。

第三段使用⑤、⑥、①点坐标;其中第⑥是为第⑤、①的切线交点。

第①、③点连线为直线,第②点可在直线上任意点。 公式如下: 其中t∈[0,1] 式中(x1,y1),(x2,y2),(x3y3)分别为首端点、中间点及末端点的坐标。

这样贝塞尔曲线拟合也只要存储①到⑥点的相对坐标。与折线拟合的数据 格式一致,所不同总是记录偶数个点的坐标值。且第偶数个点的值为前后两端点 的切线交点。在填充计算时采用不同的方法。 (6)在设备上生成一个字的坐标变换 每一个部件的每一个笔划的各坐标点由在字坐标系到设备坐标系的坐标变换公 式如下: X kij = ( ( X 2 i + S xBi × X 3 j ÷ 128 ) × B xk ÷ 128 + X k 1 ) × Z xs ÷ 128 + X 0 Y kij = ( ( Y 2 i + S yBi × Y 3 j ÷ 128 ) × B yk ÷ 128 + Y k 1 ) × Z ys ÷ 128 + Y 0 式中, (Xkij,Ykij)为i笔划各坐标点在字坐标系下的坐标, (Zxs,Zys)为整字的缩放系数, (X0,Y0)为字中心在屏幕坐标系下的坐标; (X3j,Y3j)为i笔划各坐标点在笔划坐标系下的坐标, (Xk1,Yk1)为第k部件中心在字坐标下的坐标, (Bxk,Bxk)为第k部件在X和Y方向上的缩放系数, (X2i,Y2i)为第k部件的第I笔划中心在该字元坐标系下的坐标, (xBi,SyBi)为k部件的第I笔划在X和Y方向上缩放系数, k=1---------该字元所含部件数;i=1----------第k部件所含的笔划数; j=1---------第k部件的第i笔划所含的点数; 2.ZGX字库解释程序 程序流程图如下: (1)主程序流程图,见附图1。 (2)将字库数据文件读入内存数组,见附图2。 (3)从汉字(字符)的国标码(或Unicode编码)转换到ZGX字库的字号(下列框图以 国标码为例),见附图3。 (4)根据ZGX字库字号划笔划字,见附图4。 (5)根据ZGX字号划部件字,见主程序流程图,即附图1。 (6)划笔划程序流程图,见附图例5。 (7)贝塞尔曲线递归调用程序,见附图6。 (8)用一条或多条贝塞尔曲线划一笔划段的子程序,见附图7。 (9)用一条或多条直线划一笔划段子程序,见附图8。 (10)划直线转换子程序,见附图9。 (11)划直线子程序,见附图10。 (12)在内存缓冲区中划点位图中的点的子程序,见附图11。 (13)填充算法子程序,见附图12。 (14)建立边的分类表(ET表)的子程序,见附图13。 (15)将该边的分类表(ET)中某一项的所有边插入AEL活化边表中,并按cxBottom 升序排列,见附图14。 四、ZGX字库调用接口函数   1.数据结构定义   (1)字体初始化返回指针数组

typedef struct fhzz

{

long * zys;

long * zics;

long * zrcs;

long * bhcs;

}fhzz,far * lpfhzz;

zys:字索引参数数据指针;

zics:字体之字参数数据指针;

zrcs:字体之部件参数数据指针;

zhcs:字体之笔划参数数据指针。   (2)汉字(字符)还原数组

typedef struct hzfycs

unsigned char zhd;

unsigned char zkd;

unsigned char zcd;

unsigned char zys;

unsigned char zfs;

}hzfycs,far * lphzfycs;

zhd:汉字的厚度参数,1字节,标准为32。

zkd:汉字的宽度参数,1字节,以象素点为单位。

zcd:汉字的长度参数,1字节,以象素点为单位。

zys:汉字的颜色或灰度,1字节。

zfs:汉字的显式方式参数,1字节;

     参数值约定如下:

     0位和1位为旋转方式:00为常规(不旋转),01为旋转90度,

10为旋转180度,11为旋转270度;

     2位为加粗与否:0为常规,1为加粗;

     3位为倾斜与否:0为常规,1为倾斜;

     4位为加下划线与否:0为常规,1为加下划线;

     5和6位为汉字填充方式:00为只划中心线即实现线体字,01为

实现以或方式填充的汉字,10为实现以与方式填充的汉字;11为实现以

异或方式填充的汉字;

     7位为字符显示方式,0为半角,1为全角,汉字为1。   2.字体初始化

(1)接口函数

HZ_S(zth,lpfhzz);

zth:字体号,字符变量,此为入口参数;

     参数值约定如下:

0:GB-2312的16*16点阵字库;

1:GB18030-2000宋体(汉字)曲线字库;

2:GB18030黑体(汉字)曲线字库;

3:GB18030仿宋(汉字)曲线字库;

4:GB18030楷体(汉字)曲线字库;

5:GB18030字符曲线字库;

6:…   Lpfhzz:返回参数,指针数组指针。 (2)实现方法:

根据字体号打开相应字体文件名,例如GB-2312的16*16点阵字库文 件名为DW16D,GB18030-2000宋体曲线字库文件名为DWSTQ,GB-2312黑 体曲线字库文件名为DWHTQ,字符库文件名为DWQZFK;

定义12个内存数组分别为GB-2312的16*16点阵字库数组, GB18030-2000宋体曲线字库字索引参数数组、字体之字参数数组、部件 参数数组和笔划参数数组,黑体曲线字库字索引参数数组、字体之字参数 数组、部件参数数组和笔划参数数组,仿宋、楷体、字符库等的各参数数 组;

将各字体文件数据读入相应的数组;

返回各数组指针。 3.汉字(字符)还原 (1)接口函数 HZ_X(hz$,zth,hzfycs,fclx,zbuf); Hzh:字体号; hz$:一个汉字(字符)的国标码内码,通常为2字节。 hzfycs:汉字的还原参数数组,5字节。 Fclx:返回参数类型(字符型变量),0为点位图,1为轮廓矢量数组,2 为TTF格式数据格式,3为PS格式数据格式。 Zbuf:返回汉字(字符)点位图及其他类数据缓冲区指针;此为返回参数;

汉字(字符)点位图数据存储方式为每象素点为1位,每一个字所   占字节数=[((zkd*zcd)+7)/8]。   (2)实现方法:

根据字体号找到相应数组指针;

根据汉字(字符)内码计算汉字字号,计算公式如下:即

设内码高字节为C1,低字节为C2(C1,C2为无符号整数),

若C1=0,则转半角字符处理; 当hz$在字符编码的范围内,即但字国标编码在(0X1F-0X80、 A1A1-A1FE到A9A1-A9FE、A840-A87E到A880-A8FE到A940-A97E 到A980-A9FE共1136个编码)内时,调字符字库文件DWQZFK,曲线字 库为两级结构笔划构字,笔划还原子程序不用修改,只需改调用曲线字符 库文件,处理字符结构文件,根据字符编码换算出在字符库的顺序号ZH: if(hz$>=0x1f&&hz$<=0x80)ZH=hz$-0x1f; else if(c0>=0xa1&&c0<=0xa9&&c1>=0xa1&&c1<=0xfe) ZH=99+(c0-0xa1)*94+c1-0xa1; else if(c0>=0xa8&&c0<=0xa9&&c1>=0x40&&c1<=0xa0)

{

ZH=945+(c0-0xa8)*96+c1-0x40;

if(c1>0x7f)ZH--;

     }

    否则为汉字字库转相应字体文件先做如下处理:

    若C1大于等于0XB0且小于等于0XF7且C2大于等于0XA1时(即

GB2312汉字或双字节2区):字号=(C1-176) *94+C2-161;

    若C1大于等于0X81且C2小于0XA1时(即双字节3区):当C2大

于0X7F时C2--,字号=(C1-129)*190+C2-64+6768;

    若C1大于等于0XAA且C2小于0XA1时(即双字节4区):当C2大

于0X7F时C2--,字号=(C1-170)*96+C2-64+12848;

    四字节字字号为21008-27589。

    根据字号找到描述该字的数据,

    若为16*16点阵字,该字的数据指针为:点阵字数据指针+(字号-1)

*32;

    若为曲线字,则根据字索引文件和字号找到描述该字的字参数数据,

然后根据字参数数据找到描述该字的各字元参数数据,然后根据字元参数

数据找到描述各字元的各笔划数据。

    计算各笔划数据的坐标。

    调用划笔划子程序。

    划笔划子程序调用划直线子程序和划贝塞尔曲线子程序,最后调用填

充程序。

    另外还有汉字(字符)的旋转、加粗、加下划线、倾斜子程序。

(3)设计

    设计要求成一个接口程序和划笔划子程序、划直线子程序、划贝塞尔

曲线子程序,填充子程序。

    笔划画线和填充子程序要求在内存缓冲区内实现。

    划字控制的计算都在256*256的矩形上,划中心线和轮廓线时再缩

    放(先均以字长和字宽为256,在划笔划中心线和轮廓线时先将点

    的相对字中心坐标的X坐标*字宽/256,相对字中心坐标的Y坐标*

    字长/256)。小于等于20*20的字用线体字(指均小于,即只划中心

    线),等于16*16且为GB2312国标汉字用点阵字(其余字仍用线体

    字)。

    返回为字的点位图、矢量轮廓、TTF格式或PS格式。 容错,任何字在任何分辩下显示不出错、不失真、不越界。

4.显示字符串

(1)接口函数

HZ C(hzc$,zth,zxx,zyy,hzfycs);

Hzh:字体号;

hzc$:一个(或一组)汉字(字符)的内码字符串。

Zxx:汉字(字符)串显示的左上角屏幕X坐标。

zyy:汉字(字符)串显示的左上角屏幕Y坐标。

hzfycs:汉字的还原参数数组,5字节。

高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈