可缩放笔划字体的系统和方法

文档序号:6415201阅读:423来源:国知局
专利名称:可缩放笔划字体的系统和方法
技术领域
本发明大体上涉及可缩放笔划字体,更具体地,涉及一种用于在移动计算设备(“移动设备”)上创建可缩放笔划字体数据和存储可缩放笔划字体数据的系统和方法。
背景技术
如字体数据等文本数据典型地存储在移动设备的存储器中。因为移动设备典型地具有相对有限的存储器和处理资源,存储在移动设备上的文本数据量以及移动设备的文本再现能力通常受到限制。
存在三种基本的字体类型位图、轮廓(profile)和笔划。将位图字体存储为字符的图形图像,将每种磅值的字样存储为单独的字体。将每个字符存储为象素阵列(位图)。位图字体需要相对较大的存储空间,并且相对难以进行缩放或对此类字体应用效果。
根据与字形的形状或轮廓有关的信息,产生轮廓字体,如TrueTypeTM字体。将轮廓定义为一组直线和曲线。轮廓字体比位图字体更好地便于缩放和其他效果,并需要比位图字体少的存储空间。但是,许多移动设备典型地都不具有足以有利于轮廓字体的使用的存储空间和处理要求。
笔划字体是其中以笔划表示如字形所示的字符的形状的字体。典型地,以直线和曲线来定义笔划。典型地,针对给定字形集合的笔划字体数据所需的存储空间比相应的轮廓字体数据所需的存储空间小得多。但是,与轮廓字体相比,笔划字体典型地产生具有受损质量的字形。因此,再现基于笔划的字体的现有再现引擎产生相当有限质量的字形。

发明内容
一种根据源字体数据创建字体格式数据的方法,包括分析源字体数据以获得多个字形的字形数据;解析所述字形数据;从解析后的字形数据中提取出中线(midline)数据;将所述中线数据分类为惟一元素数据和公共元素数据;以及将惟一元素数据和公共元素数据与所述多个字形中的每一个字形相关联。
一种根据源字体数据创建字体格式数据的系统,包括字形分析软件模块、字形解析软件模块、中线提取软件模块和元素分析软件模块。所述字形分析软件模块操作用于分析源字体数据,并根据所述源字体数据,获得多个字形的字形数据。所述字形解析软件模块操作用于将每个字形的字形数据解析成笔划数据。所述中线提取软件模块操作用于从所述笔划数据中提取出中线数据。所述元素分析软件模块操作用于将所述中线数据分类为惟一元素数据和公共元素数据,并将所述惟一元素数据和所述公共元素数据与所述多个字形中的每一个字形相关联。


图1是典型移动设备的方框图;图2是紧凑字体格式数据结构的方框图;图3示出了公共元素在不同字形中的重复使用;图4示出了公共元素的移位和缩放;图5A是根据轮廓字体创建笔划字体的方法的流程图;图5B是字形分析处理的更为详细的流程图;图5C是典型的简化处理的流程图;图5D是包含(containment)分析处理的更为详细的流程图;图5E是典型的字形解析处理的流程图;
图5F是字形解析处理的更为详细的流程图;图6示出了非简化形式和简化形式的字形;图7示出了具有内轮廓和外轮廓的字形;图8示出了具有点的有效和非有效相邻的字形;图9示出了被解析为笔划的字形;图10示出了解析后的字形;图11示出了几个点的等待角;图12是通过处理如图10所示的典型字形而得到的典型日志;以及图13示出了清楚连接的笔划。
具体实施例方式
字体数据典型地存储在计算设备上并用于将文本再现为字形。字体是特定字样设计和大小的字符集。字样是打印字符集的特定设计,如Courier、Helvetica或Times Roman。相关字符典型地包括脚本,如拉丁、希腊、平假名、片假名或汉字,其子集用于书写特定的语言。
字形是用于表示字符的可视元素;字形是字符图像的实际形状。将如字体和样式等文本表示方案应用于字形。例如,字符“c”的斜体Times字体和字符“c”的粗体Times字体具有相应的字形。
操作用于存储用在再现文本中的文本数据的典型计算设备可以是个人计算机或移动通信设备。图1是操作用于在显示器102上显示文本的典型移动设备100的方框图。移动设备100包括应用程序104,通常存储在存储器108中,其操作用于请求要在显示器102上进行显示的文本。再现引擎106操作用于接收来自应用程序104的请求,并作为响应,从存储器108中检索文本的字体数据,并将字体数据再现为显示在显示器102上的字形。
可以通过蜂窝电话、寻呼机、个人数字助理或其他移动计算设备来实现移动设备100。如果移动设备100包括通信电路和功能,则移动设备100典型地操作用于与无线网络110进行通信。存储器108操作用于以一种或多种格式存储数据,并可以包括数据库、文件、ROM或RAM存储器、网络存储空间甚或针对再现引擎的存储存储器,如闪速存储器模块等。显示器102可以是CRT监视器、LCD监视器或其他类似的显示设备。这种典型移动设备100之一可以是在题为“HAND-HELD ELECTRONICDEVICE WITH A KEYBOARD OPTIMIZED FOR USE WITH THE THUMBS”的美国专利No.6,278,442中所公开的类型,其全部公开在此一并作为参考。
可以将文本的字体数据存储为由字符的“骨架”所定义的笔划字体。所述骨架包括可能与其他字形共有的元素和对于特定字形是惟一的惟一元素。再现引擎106再现字符的骨架,以产生用于在显示器102上进行显示的字形。
图2示出了可操作用于存储典型字形的骨架的紧凑字体格式数据结构200的方框图。可以存储多个数据结构200,以表示相应的多个字形。可以将数据结构200存储在移动设备100上的存储器108中。
数据结构200示意性地包括公共元素202和惟一元素212。每个公共元素202包括元素标识符204、移位X值206、移位Y值208和缩放值210。公共元素标识符204对应于可以为两个或多个字形所共有的元素。每个惟一元素212包括惟一元素标识符214和元素描述216。惟一元素标识符214是特定字形所特有的元素。可以通过公共元素202、惟一元素212或公共元素202和惟一元素212的组合来表示特定的字形。
元素数据库250存储由公共元素标识符204所识别的公共元素202的描述数据218。描述数据218是X-Y坐标系统中定义了元素的直线和曲线的点集。但是,也可以使用其他描述数据。
由图2所示的示例数据结构200所表示的特定字形包括由公共元素标识符001、020和420所识别的公共元素202。但是,因为元素数据库中的描述数据218只描述了公共元素202的形状,典型地,根据具有该公共元素202的特定字形的需要,在X-Y坐标系统中移位并缩放公共元素202。因此,移位X值206包括与公共元素202沿X-Y坐标系统上的X轴的移位有关的数据,以及移位Y值208包括与公共元素202沿X-Y坐标系统上的Y轴的移位有关的数据。缩放数据210包括与公共元素根据特定字形的缩放有关的数据。元素的缩放可以增加或减小元素212的大小。
惟一元素212是特定字形惟一的元素,并因而未被存储在元素数据库250中。每个惟一元素212由惟一元素标识符214和描述数据216表示。描述数据是X-Y坐标系统中定义了惟一元素的直线和曲线的点集。
在另一实施例中,可以将惟一元素212存储在元素数据库250中,并通过其相应的惟一元素标识符214来识别。因而,数据结构200可以只存储惟一元素212的惟一元素标识符214。
再现引擎106响应对特定字形的请求,访问存储在存储器108中的相应数据结构200,并根据元素202和212构造骨架。然后,再现引擎106将骨架用作用于再现的字体数据,然后,在再现期间,应用样式、线宽和其他字样特征。在另一实施例中,可以通过再现引擎106外部的另一应用或处理来构造基于元素202和212的骨架,然后,将其提供给再现引擎106。
如果在移动设备100处使用多种字体,则可以将分离的元素数据库250存储在存储器108中。每个分离的数据库250可以对应于多种字体。可选地,可以将全部字体数据存储在单一的数据库250中。
图3分别示出了公共元素302和306在中文日文韩文(“CJK”)象形文字304的不同字形和欧洲字形308的不同字形中的重复使用。在CJK象形文字304的不同字形中示出了公共元素302,以及在不同的欧洲字形308中示出了公共元素306。对于每种特定的字形,相应地移位和缩放公共元素302和306。
图4示出了用在三种韩文字形404、406、408中的公共元素402的移位和缩放。第一韩文字形404示出了未被移位或缩放的静态形式的公共元素402。第二韩文字形406示出了向一侧进行了移位的公共元素402。第三韩文字形408示出了放大到较大尺寸的公共元素402。
图5A提供了根据源字体数据创建笔划字体的方法的流程图。在一个实施例中,源字体数据是轮廓字体数据。轮廓字体数据的一个示例是符合TrueTypeTM字体规范并存储在TrueTypeTM字体文件“字形”表中的字体数据。也可以使用其他轮廓字体信息。
对于每种字形,执行以下步骤字形分析2000、字形解析3000、中线提取4000、元素分析5000和转换6000。典型地,在如服务器或个人计算机等用于准备存储在移动设备100上的字体数据结构200和元素数据库250的计算设备上执行如图5A所示的处理。例如,如图5A所示的处理可以包括软件应用程序的典型结构或使计算设备执行所述处理的指令集。可以在单一的计算设备上实施所述处理,或者可以分布在几个计算设备上,如通过计算机网络进行通信的几台计算机。
图5B提供了字形分析步骤2000的更为详细的流程图。在字形分析步骤2000中,收集与给定字形有关的信息,并简化字形的形状。字形分析步骤2000包括以下步骤字形简化2100、轮廓线分析2200、包含分析2300和轮廓点分析2400。除非特别声明,轮廓线表示特定字形的多边形形状,以及点表示顶点。字形可以包括单一轮廓线,如以下针对字母“I”的字形,或者可以包括多个轮廓线,如以下针对符号“Θ”的字形。
在字形简化步骤期间,简化给定字形的轮廓。在轮廓线分析2200步骤期间,将给定字形的轮廓线分类为内和外轮廓线组。在包含分析步骤2300期间,对给定字形的轮廓线进行处理,以确定轮廓线的包含。在轮廓点分析2400步骤期间,收集与每个轮廓点有关的数据。此数据可以包括笛卡儿坐标、所述点相对于其他点的角度、有效邻点等。
图6示出了非简化形式600和字形简化步骤2100之后的简化形式602的字形的线形图。如图所示,字形600具有包括直线段和贝塞尔弧线的轮廓线612、614和616。在圆圈区域内简化字形600的轮廓线612、614和616,以便简化随后步骤中的处理。如果不需要或并不特别关心处理缩减,可以省略字形简化步骤2100。
通过去除给定字形的形状中的冗余点来实现简化。图5C示出了典型的简化处理。简化处理可以包括簇去除(cluster removal)处理2102、贝塞尔弧线阶数缩减处理2104和多边形简化处理2106。也可以使用其他简化处理。
在簇去除处理2102期间,通过去除点或线段,对其中点比较接近从而这些点不能定义轮廓线中的重要线段的点群(“簇”)进行简化。典型地,这些是可以从字形定义中去除、同时引起给定字形的形状的微小变形或不引起变形的相对较短线段或点。
对于线段去除,定义了冗余线段的最大长度和/或角度。最大长度和/或角度的特定数据可以是用户定义的,或者根据简化标准自动确定。典型地,较大的最大长度和/或角度导致额外的简化,但也导致额外的可视变形。典型地,根据所要得到的字形字体的所需质量来确定最大长度。
通过从字形的轮廓中去除一个或多个点来简化或去除其长度和/或角度小于或等于特定值的直线段。可以通过遍及所有轮廓线的点的迭代,并确定由ni-ni+1顶点对所定义的每个线段的长度,并去除满足长度和/或角度条件的线段来实施去除处理。重复处理每个轮廓线,直到去除线段数为零。针对字形轮廓的每个轮廓线,执行此迭代处理。
在贝塞尔弧线阶数缩减处理2104期间,对贝塞尔弧线进行简化。贝塞尔弧线由2阶(二次贝塞尔曲线)或3阶(三次贝塞尔曲线)多项式所定义。二次贝塞尔弧线被定义为三个点的序列线上—线外—线上。三次贝塞尔弧线被定义为四个点的序列线上—线外—线外—线上。“阶数缩减”是将三次弧线缩减为圆锥弧线、从而将多项式的阶数从3缩减为2的处理。阶数缩减找出三次弧线的两个线段的交点。例如,如果通过四个顶点来定义三次弧线ni、ni+1、ni+2、ni+3,则确定ni-ni+1和ni+2-ni+3线段的交点。然后,将此交点定义为弧线的新线外点,并进一步将弧线的定义限定为ni-新控制/线外点-ni+3,其中以单一点(新控制/线外点)来代替顶点ni+2和ni+3。保留弧线的起始和结束点,从而减少了轮廓线中不重要的点的数量。当然,也可以使用其他弧线简化例程。
在多边形简化处理2106期间,去除位于距离由其任意一侧的两个直接邻点所定义的线特定距离的轮廓点。例如,当平角和由所述点与两个邻点所定义的角度之间的差小于恒定值或“最大角度”时,去除所述点。最大角度可以是用户定义的,或者根据所需的字形简化量自动确定。
为了示例,给定三个顶点ni-1、ni、ni+1,并计算角度ni-1-ni-ni+1。当此角度与平角之间的差小于最大角度时,则丢弃ni点。对于线外和线上点可以分别有两个阈值。例如,如果三个点ni-1、ni、ni+1中的ni点在线上,则可以使用一个最大角度值s1;当ni点在线外时,可以使用另一最大角度值s2。
在简化之后,在轮廓线分析2200步骤期间,将给定字形的轮廓线分类为内和外轮廓线组。图7示出了具有内轮廓线704和外轮廓线706的字形702的轮廓形状700。内轮廓线704示例地定义了外轮廓线706内的限定空间。可以将这种形状描述为具有“孔”的多边形,其中外轮廓线706是多边形的外边界,而内轮廓线704定义了多边形内部的“孔”。
根据TrueTypeTM转换,定义内和外轮廓线,从而按照相反的方向排序。例如,外轮廓线方向为顺时针,则内轮廓线方向为逆时针,反之亦然。为了确定轮廓线的方向,迭代遍及每个轮廓线的点,并根据多边形面积公式,计算轮廓线的带符号面积poly_area=0.5*[(V0.x*V1.y-V1.x*V0.y)+...
+(Vi.x*Vi+1.y-Vi+1.x*Vi.y)+...
+(Vn-1.x*Vn.y-Vn.x*Vn-1.y)]其中Vi是多边形的顶点,n是多边形中的顶点总数。所得到的数值poly_area是确定了轮廓线为顺时针或逆时针的带符号数值。正值对应于逆时针方向,而负值对应于顺时针方向。如果面积为零,则通常未定义方向,并因而可以将其设置为缺省的顺时针或逆时针方向。在一个实施例中,如果面积为零,将轮廓线定义为逆时针方向。
在分类之后,在包含分析步骤2300中,对给定字形的轮廓线进行处理,以确定包含。分析每个外轮廓线,以确定内轮廓线是否被包含在其中。然后,相应地对每个轮廓线进行分类。所述分类确定了每个字形的分离形状,并从而可以将字形定义为分离形状的集合。每个分离形状包括一个或多个轮廓线,第一轮廓线是外轮廓线,而其他轮廓线是内轮廓线。
可以通过获取每个内轮廓线并迭代遍及所述内轮廓线的点的简单强制算法来确定包含。也可以使用其他包含算法。在强制算法中,迭代并检查每个内轮廓线的每个点,以针对所有外轮廓线,确定其是否在外轮廓线的内部。如果内轮廓线的所有点都在一个外轮廓线的内部,则该内轮廓线完全被包含在所述外轮廓线中。在一个实施例中,将所述外轮廓线定义为包含轮廓线,而将所述内轮廓线定义为被包含轮廓线。一旦对所有外和内轮廓线进行了分类,则可以将给定的字形表示为分离形状数据结构的序列。每个数据结构包含对给定字形的引用和与字形的包含和被包含轮廓线有关的信息。
然后,在轮廓点分析步骤2400期间,对轮廓线的点进行处理。分析与对应于原始字形数据的每个剩余点有关的轮廓信息。通过分析,获得点坐标,如图5D的步骤2402所示。在TrueTypeTM字体示例中,从TrueTypeTM文件中获得该信息。该信息包括点的坐标并按照字体单元进行规定、点的类型(例如,线上或线外点)、以及点到来自TrueTypeTM文件的原始字形数据的点阵的索引。
对每个分离形状的点进行分类,以提供与每个点有关的额外信息。确定每个点的内角,根据该数值,将每个点指定为凸或优角类型的,如步骤2404所示,并确定每个点的有效邻点,如步骤2406所示。
在将每个点分类为凸或优角的期间,确定顶点ni处的两个角度。将一个角分类为内角,而将另一个角分类为外角。内角表示由所述点及其两个直接邻点所定义的、属于多边形的内部或限定区域的角(假设多边形的顶点ni,则存在由ni-1、ni、ni+1定义的三角形)。外角表示由所述点及其两个直接邻点所定义的、属于多边形的外部或未限定区域的角(再次假设多边形的顶点ni,则存在由ni-1、ni、ni+1定义的三角形)。
顶点ni处的这两个角的和为360度。顶点ni点是点集ni-1、ni、ni+1中的公共点。为了定义角,确定顶点ni+1位于由ni-1-ni线段所定义的线的第一侧或第二侧。使用用于确定三角形的带符号面积的公式,其中三角形由ni-1、ni、ni+1顶点的三元组所定义。对于顺时针方向的轮廓线,三角形面积的正值对应于ni+1顶点位于由ni-1-ni顶点对所定义的线的第一侧。因此,ni顶点是优角型的。相反,负值或零值对应于ni顶点位于由ni-1-ni顶点对所定义的线的右侧,因而ni顶点是凸型的。对于逆时针方向的轮廓线,反转所述定义。
可以通过余弦定理来确定角的角度值。因此,将具有钝内角的任何点分类为优角点,而将具有锐内角的任何点分类为凸点。当内角为平角时,根据本发明的一个实施例,可以将所述点定义为凸点。在另一实施例中,当内角为平角时,将所述点定义为优角点。
针对每个点还确定有效相邻点(“有效邻点”),如步骤2406所示。如果满足以下条件,则给定字形的轮廓线的任意点为任何其他给定点的有效邻点(1)这两个点属于相同的分离形状(separate shape),例如,这两个点属于外轮廓线或任何被包含的内轮廓线;以及(2)由这两个点所定义的线段不与所述分离形状的任何轮廓线的任何其他线段相交,例如,由这两个点所定义的线段被完全包含在所述分离形状的内部。如果任何点满足上述两个条件,则将其添加到所述点的有效邻点列表中。然后,按照其距给定点的距离,对有效邻点进行分类和排序,从而使最近的邻点排在第一位。
分离形状的面积由其外轮廓线和内轮廓线联合确定Sarea=(A∪Bi+A∪Bi+1+...+A∪Bi+n)-(A∩Bi+A∩Bi+1+...+A∩Bi+n),其中S是分离形状面积,Aarea是分离形状S的外轮廓线的面积,以及Bi...n是分离形状S的内轮廓线的面积。
给定点的有效邻点的特征可以是从给定点的“可见”点。绘制直线段连接点与给定点,并表示这两个点之间的可视路径。如果所述直线段并不受到分离形状或所述轮廓线的其他线段的影响,则所述点是给定点的有效邻点,即可以从给定点“看到”所述点。
图8示出了具有点之间的线的字形形状的线形图,以提供对点800的有效和非有效邻点的图释。点800与其他点802、804、806和808之间的线示出了所述其他点802、804、806和808是点800的有效邻点。可以从点800“看到”所述其他点802、804、806和808,而不会与字形形状的任何线段相交,并属于与点800相同的分离形状。点800与点810和812之间的线示出了第一点810和820不是点800的有效邻点,因为点800和第一点810和812并不属于相同的分离形状。点800与点814和816之间的线示出了第二点814和816不是点800的有效邻点,因为这些线与字形形状的线段相交。
在字形解析步骤3000期间,将字形解析/分解为一系列的“笔划”。所述笔划不必具有与给定字形的每个分离形状的对应性。可以将一个分离形状解析/分解为多个笔划。除非特别声明,术语“解析”和“分解”可以互换地使用。
图9示出了被解析为由数字902、904、906、908、910和912表示的笔划的样本字形900的示例的线形图。如图所示,分离形状914具有由数字906、908和910表示的三个笔划。
笔划可以对应于以钢笔书写或以画笔绘制字符的方法。例如,一些字符可以只通过一个笔划来书写,而其他字符需要几个笔划。因此,可以根据钢笔的自然运动的概念得出“运动矢量”。运动矢量对应于位于类似于钢笔的自然运动的相同路径上的笔划的点。因为并非轮廓的所有点均位于相同的路径上,只将运动矢量应用于特定的点集,以便定义笔划的运动。
图5E提供了典型字形解析处理的流程图。将每个提取出的笔划几何地定义为闭合多边形或轮廓线。每个笔划具有两侧,笔划的第一侧和笔划的第二侧。每侧均具有一对起始和结束点,表示该侧起始和结束的点。可以按照有利于从第一侧的第一点到第二侧的最后一点顺序递增的顺序存储两侧的所有点。
在一个实施例中,可以由阵列数据结构中的点来表示每个轮廓线,并且可以通过其在阵列中的入口的索引来引用每个点。通过选择定义第一和第二侧的一对点来确定起始点,如步骤3002所示,并递增遍及第一和第二侧的点,如步骤3004所示。笔划的第一侧向阵列中的下一入口移动,而相对侧向阵列中的前一入口移动。例如,如果第一侧的当前点是点3,则要递增的下一点是点4。类似地,如果第二侧的当前点是点11,则要递增的下一点是点10。
随着对点的遍历,定义了轮廓线的第一和第二侧的路径从一点移动到下一点。将遍历路径存储为点递增的集合,并在每个点递增之后,由系统确定笔划是否闭合,如步骤3006所示。当第一侧和第二侧在同一点相会时,完成笔划处理。可选地,对于完成笔划,也可以满足其他条件。
如果笔划并未闭合,则针对每个递增点,确定该递增点是否为候选点,如步骤3008所示。候选点对应于轮廓中两个或多个笔划可能彼此相交的转弯或角。因此,要递增到的下一点可能不是沿路径的下一点。而是,要递增的下一点可能是与运动矢量相对应的点。在一个实施例中,候选点是具有钝内角的优角点。
此要递增到的下一有效点为“移至”点。移至点不必是候选点的直接邻点;而是,移至点对应于运动矢量,从而当前笔划得到与用于书写该笔划的钢笔的自然运动概念相对应的自然连续。因此,沿路径从候选点向并未移至点得下一点移动违反了笔划的自然连续的概念。因此,根据运动矢量选择针对候选点的有效移至点,并将有效移至点存储为“发生”或“事件”,如步骤3010所示。
相反,如果此侧的当前点并非候选点,则不必应用运动矢量确定。在这种情况下,可以与运动矢量无关地选择有效移至点,如步骤3012所示。
一侧的“移至”点位于由该侧的前一点和该侧的当前点形成的直线附近。根据平角与由包括前一点(side_previous_point)、当前点(side_current_point)和所提出的“移至”点的三个顶点所定义的角之间的差,来确定点是否在附近。优选地,所述差值小于指定的平坦度阈值。对于每个特定的字体,平坦度阈值可以不同,典型地,其范围在10到25度之间。
在存在要评估的几个已提出的移至点的一个实施例中,被选为有效移至点的点是在二者之间的距离方面最靠近该侧的当前点的点。在存在要评估的几个已提出的移至点的另一实施例中,被选为有效移至点的点是针对所述点的差值最低于平坦度阈值的点。也可以使用其他评估标准。
如果找到有效移至点,则向有效移至点继续运动。将从候选点到有效移至点的运动存储为“发生”或“事件”,如步骤3012所示。可以针对每一侧,对事件进一步分类,作为共有事件。当在两侧同时发生事件时,记录共有事件。将共有事件存储为两侧的候选点及其移至点对。事件可以将两个笔划连接在一起,并可以用作其他笔划的潜在起始点。
步骤3014确定是否已经处理了给定笔划的所有点或者笔划是否闭合。如果还有待处理的点或如果笔划未闭合,则重复步骤3004~3012。否则,步骤3016确定是否还有待处理的、针对字形的任何事件或点。如果有,则选择新的点集,如步骤3018所示,并重复步骤3004~3016。否则,处理完成。
图10示出了依照字形解析处理3000进行了解析的典型字形1000的线形图。典型字形1000具有由点1到37所定义的轮廓形状。被包围在矩形1002、1004、1006、1008中的起始点对是笔划1010、1012、1014、1016的起始点。由矩形1006和1008表示的点9、30和32、35还是作为笔划1014和1016的起始点的事件。被包围在圆圈中的点9、33、18、32和36是候选点,以及根据由笔划1010、1012、1014和1016的中心箭头所示的每个笔划的方向,其相应的移至点分别为30、10、37、35和1。候选点33为笔划1014和1016所共有,因而,将其与针对笔划1014的移至点10和针对笔划1016的移至点34相关联。以表示运动矢量的箭头来表示每个笔划1010、1012、1014、1016。
图5F提供了字形解析处理3000的更为详细的流程图。步骤3020设置多个处理值。在一个实施例中,多个处理值包括平坦度阈值、起始阈值、起始跨距深度值、未标记点容差值和未标记线段容差值。
平坦度阈值用于评估潜在的移至点。起始阈值、起始跨距深度值用于确定起始点。未标记点容差值用于规定针对给定的形状、多少未处理的点是可以容忍的。未标记线段容差值用于规定针对一个形状、多少未处理的线段是可以容忍的。
然后,选择起始点对,如步骤3022所示。在一个实施例中,根据其在x-y轴上的位置来选择起始点,例如,将最左边的点对(如图10所示的点5、6、21和22)选作起始点。也可以使用选择起始点的其他方法。
起始阈值用于将点定义为候选。如果所述顶点处的角小于起始阈值,则所述点为有效起始点对,并将其定义为净(clean)起始点。如果两个角度都大于起始阈值,则丢弃该对,并拾取另一对。如果一个角大于起始阈值,则将作为所述一个角与360度之间的差值的角与起始阈值进行比较。如果比较值小于起始阈值,所述点对是有效起始点对并定义为脏(dirty)起始点。
对并非直接邻点;典型地,其间有至少一个点。通过起始跨距深度值来定义以点数为单位的距离的深度。
可以通过利用字体图案来简化选择起始点的处理。在一个实施例中,如果使用字体图案,则根据字体图案选择的起始点对具有高于其他对的优先级。类似地,净对具有高于脏对的优先级。在确定所有可能的对之后,在步骤3024中,对所述对进行优先级排序,并在步骤3026中,根据优先级进行选择。在每个优先级组中,选择点之间具有最小距离的对。
在拾取起始点对之后,定义笔划的两侧,如步骤3028所示。每一侧均具有起始点,并沿着从此起始点开始的路径递增,如步骤3030所示。在一个实施例中,将每个形状的点存储在阵列数据结构中,以及沿着路径的递增导致了从存储起始点的阵列单元开始对整个阵列的迭代。
然后,评估所述点,以确定其是否为候选点,如步骤3032所示。当遇到候选点时,如上述步骤3010和3012中所述,确定有效移至点。如果所述点并非候选点,则系统沿路径递增到下一点,如步骤3034所示。对于非候选点,如果两侧的直接点均为有效邻点,满足等待角评估,并且下一点并不由另一已创建的笔划所有,则将直接点递增到下一点。典型地,这些条件只对于非候选点的点有效,因为由于笔划交叉,候选点由多个笔划所有。
使用“可见(can-see)”规则来确定两侧的直接点是否为有效邻点。如果在每次递增,两侧的直接点相互“看到”,即第一侧的直接点使第二侧的直接点在其有效邻点中,则满足可见规则。可见规则的违反可能由于在发生期间错误地选择移至点或由于字形的形状的布局而导致。
在确定针对给定候选点的有效移至点期间,可见规则的违反导致所提出的移至点被丢弃。如果由于字形的形状的布局引起违反,则丢弃直接点而从另一侧的有效邻点列表中选择最靠近直接点的点。例如,如果在沿笔划的一侧运动的同时,可见规则的违反导致该侧的直接点被丢弃,并由来自另一侧的直接点的邻点列表的第一可用点替代。
等待角度值用于通过对沿笔划两侧的运动的递增速率进行归一化来防止可能的“可见”规则违反。例如,如果沿第一侧的路径存在较少的点且点之间的距离与第二侧的点相比相对较大,则第一侧可能快速地递增。因此,第二侧可能包括更多的点,而针对相同的递增数,滞后于第一侧。为了有利于两侧的当前点最近,针对每一侧,将由当前点且相对于两侧而定义的角于等待角进行比较。如果一侧的角小于等待角,则并不递增该侧的当前点,则递增针对另一侧的当前点。
图11示出了针对几个点的等待角。由点1~9定义矩形,并具有起始点1和9。路径分别从起始点1和9向点2和8递增。将等待角α1和α2于阈值等待角(例如,66度)进行比较。由于等待角α1和α2都超过66度,两个路径都递增。将等待角α1和α1与阈值等待角进行比较。因为等待角α1为45度,是小于66度的等待角,则来自点7的路径将不再递增到点6,而来自点3的路径将递增到点4。
每次两侧执行向其相应下一点运动时,或在发生或事件发生之后,系统确定当前处理的笔划是否可以闭合,如图5F中的步骤3036所示。笔划的闭合定义了数据结构,该数据结构存储定义了两侧的所有点、每侧的起始和结束点对和事件。将每个处理过的点分类为已拥有的,除了候选点,因为候选点可以为几个笔划所共有。可以将共有候选点的笔划数存储在数据结构中。
在笔划闭合时,系统确定是否还有未处理的字形形状的点,如步骤3038所示。例如,如果任意点未被拥有且不是候选点,则该点仍未被处理。评估事件以确定是否还有待处理的剩余事件。可以将事件存储在队列中,并将队列中的第一事件处理为针对下一笔划的起始点对。如果事件队列为空,则拾取新拾取点,并选择起始点对,如步骤3040所示。当不存在待处理点或未处理的点数在用户定义的数值之内时,点处理完成。
图12示出了通过如图10所示的字形处理而得到的典型日志。该日志列出了解析处理步骤和每个笔划所包含的信息。迭代典型字形的全部分离形状,以便将其中的每一个解析为笔划。
字形解析3000的最后一步是对笔划的融合(merging),如步骤3042所示。为了减少冗余,可以将特定的笔划统一为一个笔划,从而减少紧凑字体格式的字形中的行数。融合处理搜索完全包含的笔划和清楚连接和隐含连接的笔划。
完全包含的笔划是完全包含在另一笔划中的笔划。在一个实施例中,笔划是否为完全包含的确定包括确定第一笔划的所有点是否被包含在由第二笔划的点所限定的边界内的步骤。如果笔划是完全包含的,则丢弃该笔划。
清楚连接的笔划是部分由共有事件所定义的笔划。当在形状的两侧发生事件时,这些事件定义了共有事件。共有事件定义了两对点,所述形状的每侧一对。当从事件队列中处理事件时,每对点随后定义了另一笔划的起始点对。因此,一个共有事件可以是两个笔划的源。可以将这些笔划融合在一起以形成单一笔划。
图13示出了清楚连接的笔划。由点1~20定义的字形包括笔划1020和1022。共有事件1024和1026分别是由点13~18和3~8所定义的笔划的起始点。因此,将这些笔划进行组合,以形成由点3~8和13~18所定义的清楚连接的笔划1022。
当一个笔划的结束点对还是另一笔划的起始点对时,隐含连接的笔划发生。迭代笔划的所有点,以确定笔划是否具有匹配结束点或起始点。如果是,将笔划融合为单一笔划。
在融合步骤之后,解析处理3000完成,并执行中线提取处理4000。中线对应于给定几何形状的多边形骨架。例如,矩形的中线可以是与矩形的长轴相对应的直线。因此,骨架是提供了形状的近似视图的、由线段组成的一条或多条线。将给定字形分解为笔划,其中每个笔划提供了在字形的最终的基于笔划的形状中的中线的基础,有利于字形骨架的产生。在中线提取处理4000期间,提取所有笔划的相应中线。例如,在图9中示出了所提取出的中线916。
每个笔划由两侧和起始点和结束点对定义。通过迭代笔划的所有点来确定中线。对于第一侧的每个点,找出来自第二侧的相应最近点。对于由这两个点定义的线段,找出终端,并添加到中线中。针对第二侧的每个点,重复该处理。在已经对两侧进行了处理之后,计算这两条中线的长度。将较长的中线定义为笔划的中线。
可以通过类似于上述字形简化处理2100的简化处理,以及通过按照与参照上述解析处理3000的融合步骤描述的类似方式,对中线进行融合,来简化最终的中线。中线简化减少了字形骨架中的点数。
在元素分析步骤5000中,针对具有重复图案的元素,搜索字形。根据本发明的一个实施例,图案匹配确定图案是否重复。可以使用图案数据库来执行图案匹配。从字体中提取出字体中频繁出现的图案。在数据库中定义字形,并存储字形中具有匹配图案的特定部分。在进行图案匹配处理之前,从数据库中读取信息。
在图案匹配处理期间,将给定字形的轮廓线与来自数据库的图案进行比较。所述比较基于通过测量形状的特定参数的不变性函数而得到的相似性测量。即使在形状受到了不同的几何变形时,这些参数通常仍然保持不变,因此对于变形而言是“不变的”。
可以通过等距、相似和仿射变形来确定不变性。等距变形是保持距离的平面变形。相似是保持形状的平面变形,并且是通过将比例缩放变形(也称为位似)与等距进行合成而得到的平面变形。仿射变形是保持线条和平行的变形。用于图案匹配的典型变形可以包括平移、比例缩放和非比例缩放。也可以使用其他变形。
在其中通过沿X或Y轴的移位值移位原始形状的每个点、从而使得下式成立的二维平面中的平移期间,典型的图案匹配处理对两个形状的相似性进行比较Xi(new)=Xi(org)+<偏移>以及Yi(new)=Yi(org)+<偏移>,其中Xi和Yi是形状和图案的第i个点的X和Y坐标。如果偏移是已知的,则可能只需要一次比较,例如,通过从Xi(new)中减去该数值是否能得到Xi(org)。
如果偏移是未知的,则可能需要形状和图案之间的额外比较。例如,可以确定形状和图案的最右边的点,并减去相应的X和Y坐标,以获得偏移值。选择形状的剩余点,并从偏移值中减去这些点的X和Y坐标。如果作为减法结果,得到了图案的相应点的X和Y坐标,则形状相似于图案。如果减法对于形状的所有点都给出这种结果,则形状相似于图案。相反,如果减法导致形状中的X和Y坐标不同于图案的点的X和Y坐标,则形状不相似于图案。因此,在平移变形下,相似形状和图案的距离保持不变。
对于每个字形,如参照上述图2所述,将标识图案识别为公共元素202或惟一元素212。如果未找到匹配图案,则惟一元素用于描述特定笔划。
如由统一码联盟提供的字体数据等数据可以用于定义字体元素。例如,对于定义了象形文字的CJK字形,可以使用基于部首的元素提取。部首是用于检索CJK字典中的搜索处理的笔划甚或完整的象形文字。类似地,在统一码规范下,按照部首对全部象形文字进行分组(例如,参见康熙部首或统一码规范的CJK部首补充)。这些部首是要提取的主要元素。在图案匹配处理期间使用的图案数据包括作为部首的字形或字形的一部分。除了CJK部首之外,如果任意特定的字形或字形的一部分在多个字形中重复出现,可以根据可视估计来定义额外的图案。
作为另一示例,针对韩文Hangul字节(syllable),定义了允许将每个Hangul字节分解为其Jamo字符的分解规则,所述Jamo字符也由统一码规范所覆盖。在韩语中,所有的Hangul字节均由Jamo字符组成,因此,可以认为Jamo字形是构成韩文的Hangul字形的基本元素。
对于其他语言,例如,可以使用统一码规范图。对于每个合成字形,这些图定义了合成字形所包括的简单字形。存在针对Hangul、日文、一些CJK象形文字、复杂Latin字形和复杂阿拉伯字形的规范图。在元素分析5000中使用此信息,以定义紧凑字体格式的元素。
在另一实施例中,实施图案匹配,而无需特定的字形数据。迭代每个字形,并将其存储在评估数据库中。系统根据存储在公共数据库中的数据,递归地确定是否存在公共元素。
在转换步骤6000中,将轮廓字体的几何数据调整为紧凑字体格式的规范。例如,将TrueTypeTM字样设计单元中所规定的原始点转换为紧凑字体格式设计单元。此转换可以用于多种字体规格,如字体基线、字体上升和字体下降等。也可以使用其他的规格。
转换步骤6000将字体数据存储为一组数据结构200和数据库250,如参照上述图2所述。将与其他元素图案匹配的元素存储为元素数据库250中的公共元素204,并在相应的字形数据结构200中进行引用。字形数据结构200还存储相应的移位X值206、移位Y值208和缩放值210。如参照上述图2所述,与伴随描述数据216一起存储惟一元素212。另一典型数据结构是如上述临时申请60/393,795中所述的Slangsoft字体格式的数据结构。也可以使用其他数据结构和存储体系结构。
在完成转换步骤6000之后,可以将字体数据存储在移动设备100上,以便与参照上述图1所述的应用程序或再现引擎一起使用。也可以将转换步骤6000包含在元素分析步骤5000中。
尽管已经参照字体数据,对本申请的系统和方法进行了描述,本申请的系统和方法也可以应用于其他数据类型,如图形数据实体、地图实体或其他可视显示实体。在另一实施例中,本系统和方法的典型数据结构可以用于以紧凑的格式存储地图数据。例如,可以按照典型数据结构的紧凑格式存储如城市等地理区域的地图,并通过再现引擎进行访问,以重构城市地图。额外地,随着移动设备改变位置,可以下载移动设备所处的新地理区域的额外地图数据。
所撰写的说明书使用示例性实施例来公开本发明,包括了最佳模式,并且使本领域的普通技术人员能够实现和使用本发明。如果其他实施例或设备具有并非不同于权利要求书的文学语言的元素或等价于权利要求书中所述的元件,则其仍然包括在权利要求书的范围内。
权利要求
1.一种根据源字体数据创建字体格式数据的系统,包括字形分析软件模块,存储在计算机可读介质中并包括计算机可执行指令,操作用于使计算设备分析源字体数据,并根据所述源字体数据,获得多个字形的字形数据;字形解析软件模块,存储在计算机可读介质中并包括计算机可执行指令,操作用于使计算设备将每个字形的字形数据解析成笔划数据;中线提取软件模块,存储在计算机可读介质中并包括计算机可执行指令,操作用于使计算设备从所述笔划数据中提取出中线数据;以及元素分析软件模块,存储在计算机可读介质中并包括计算机可执行指令,操作用于使计算设备将所述中线数据分类为惟一元素数据和公共元素数据,并将所述惟一元素数据和所述公共元素数据与所述多个字形中的每一个字形相关联。
2.根据权利要求1所述的系统,其特征在于所述字形分析软件模块计算机可执行指令包括轮廓线分析软件指令,操作用于使计算设备将所述字形数据分类为内和外轮廓线数据;以及包含分析软件指令,操作用于使计算设备确定所述内和外轮廓线数据的包含。
3.根据权利要求3所述的系统,其特征在于所述字形分析软件模块计算机可执行指令还包括字形简化软件指令,操作用于使计算设备根据所述字形数据产生缩减字形数据。
4.根据权利要求3所述的系统,其特征在于操作用于使计算设备根据所述字形数据产生缩减字形数据的所述字形简化软件指令包括簇去除软件指令,操作用于使计算设备缩减所述字形数据中的数据簇;贝塞尔弧线缩减软件指令,操作用于使计算设备缩减所述字形数据中的贝塞尔弧线数据;以及多边形简化软件指令,操作用于使计算设备缩减所述字形数据中的多边形定义数据。
5.根据权利要求3所述的系统,其特征在于所述字形分析软件模块计算机可执行指令还包括轮廓点分析软件指令,操作用于使计算设备根据至少一个轮廓线特征对所述字形数据进行分类。
6.根据权利要求5所述的系统,其特征在于所述至少一个轮廓线特征包括凸和优角特征。
7.根据权利要求5所述的系统,其特征在于所述至少一个轮廓线特征包括有效邻点特征。
8.根据权利要求1所述的系统,其特征在于所述字形解析软件模块计算机可执行指令包括操作用于使计算设备进行以下操作的指令从所述字形数据中选择起始笔划数据;从所述起始笔划数据开始递增遍及所述字形数据;确定已递增字形数据是否为候选数据;以及如果所述已递增字形数据是候选数据,则根据运动矢量数据,选择遍及所述字形数据的下一个递增。
9.根据权利要求8所述的系统,其特征在于所述字形解析软件模块计算机可执行指令还包括操作用于使计算设备进行以下操作的指令将根据所述运动矢量数据遍及所述字形数据的递增存储为事件数据;以及选择事件数据,作为针对字形数据到笔划数据的随后解析的起始笔划数据。
10.根据权利要求8所述的系统,其特征在于操作用于使计算设备根据运动矢量数据选择遍及所述字形数据的下一递增的指令包括操作用于使计算设备将所述字形数据中的提议递增与平坦度阈值进行比较并根据所述比较确定所述字形数据中的所述提议递增是否有效的指令。
11.根据权利要求8所述的系统,其特征在于操作用于使计算设备从所述字形数据中选择起始笔划数据的指令包括操作用于使计算设备进行以下操作的指令根据所述字体源数据,识别起始笔划数据;根据起始阈值数据,识别起始笔划数据;以及对已识别的起始笔划数据进行优先级排序,并选择最高优先级的已识别起始笔划数据。
12.根据权利要求8所述的系统,其特征在于所述字形解析软件模块计算机可执行指令还包括操作用于使计算设备在所述字形数据的解析之后融合针对每个字形的笔划数据的指令。
13.根据权利要求12所述的系统,其特征在于操作用于使计算设备在所述字形数据的解析之后融合针对每个字形的笔划数据的指令包括操作用于使计算设备进行以下操作的指令识别清楚连接的笔划数据;识别隐含连接的笔划数据;融合所述清楚连接的笔划数据;以及融合所述隐含连接的笔划数据。
14.根据权利要求1所述的系统,其特征在于所述中线提取软件模块计算机可执行指令包括操作用于使计算设备进行以下操作的指令递增遍及所述笔划数据;针对每次递增,确定并存储中线数据值;以及在递增遍及所述笔划数据之后,将所述中线数据定义为已存储中线数据值。
15.根据权利要求14所述的系统,其特征在于操作用于使计算设备确定并存储中线数据值的指令包括操作用于使计算设备进行以下操作的指令根据已递增笔划数据,定义线段数据;根据所述线段数据,定义中点;以及将所述中线数据值定义为中点。
16.根据权利要求1所述的系统,其特征在于所述元素分析软件模块计算机可执行指令包括操作用于使计算设备进行以下操作的指令识别定义了公共图案的中线数据;识别定义了惟一图案的中线数据;针对定义了公共图案的每个已识别中线数据,根据公共元素标识符,对定义了公共图案的已识别中线数据进行分类;以及针对定义了惟一图案的每个已识别中线数据,根据惟一元素标识符,对定义了公共图案的已识别中线数据进行分类。
17.根据权利要求16所述的系统,其特征在于所述元素分析软件模块计算机可执行指令还包括操作用于使计算设备进行以下操作的指令将所述公共元素标识符和相应的解译数据存储在字形数据结构中;将所述惟一元素数据存储在所述数据结构中;以及将所述公共元素标识符和所述公共元素数据存储在公共元素数据库中;其中由所述解译数据进行解译的相应公共元素数据和所述惟一元素数据定义了字形形状的多边形骨架。
18.一种根据源字体数据创建字体格式数据的方法,包括分析源字体数据以获得多个字形的字形数据;解析所述字形数据;从解析后的字形数据中提取出中线数据;将所述中线数据分类为惟一元素数据和公共元素数据;以及将所述惟一元素数据和所述公共元素数据与所述多个字形中的每一个字形相关联。
19.根据权利要求18所述的方法,其特征在于分析源字体数据以获得多个字形的字形数据包括将所述字形数据分类为内和外轮廓线数据;以及确定所述内和外轮廓线数据的包含。
20.根据权利要求19所述的方法,其特征在于分析源字体数据以获得多个字形的字形数据还包括根据所述字形数据产生缩减字形数据。
21.根据权利要求19所述的方法,其特征在于分析源字体数据以获得多个字形的字形数据包括根据至少一个轮廓线特征对所述字形数据进行分类。
22.根据权利要求21所述的方法,其特征在于所述至少一个轮廓线特征包括凸和优角特征。
23.根据权利要求21所述的方法,其特征在于所述至少一个轮廓线特征包括有效邻点特征。
24.根据权利要求18所述的方法,其特征在于解析所述字形数据包括从所述字形数据中选择起始笔划数据;从所述起始笔划数据开始递增遍及所述字形数据;确定已递增字形数据是否为候选数据;以及如果所述已递增字形数据是候选数据,则根据运动矢量数据,选择遍及所述字形数据的下一递增。
25.根据权利要求24所述的方法,其特征在于解析所述字形还包括将根据所述运动矢量数据遍及所述字形数据的递增存储为事件数据;以及选择事件数据,作为针对字形数据到笔划数据的随后解析的起始笔划数据。
26.根据权利要求24所述的方法,其特征在于根据运动矢量数据选择遍及所述字形数据的下一递增包括将所述字形数据中的提议递增与平坦度阈值进行比较;以及根据所述比较确定所述字形数据中的所述提议递增是否有效。
27.根据权利要求24所述的方法,其特征在于从所述字形数据中选择起始笔划数据包括根据所述字体源数据,识别起始笔划数据;根据起始阈值数据,识别起始笔划数据;以及对已识别起始笔划数据进行优先级排序;并选择最高优先级的已识别起始笔划数据。
28.根据权利要求24所述的方法,其特征在于解析所述字形还包括在所述字形数据的解析之后融合针对每个字形的笔划数据。
29.根据权利要求28所述的方法,其特征在于在所述字形数据的解析之后融合针对每个字形的笔划数据包括识别清楚连接的笔划数据;识别隐含连接的笔划数据;融合所述清楚连接的笔划数据;以及融合所述隐含连接的笔划数据。
30.根据权利要求29所述的方法,其特征在于从解析后的字形数据中提取出中线数据包括递增遍及所述笔划数据;针对每次递增,确定并存储中线数据值;以及在递增遍及所述笔划数据之后,将所述中线数据定义为已存储中线数据值。
31.根据权利要求18所述的方法,其特征在于将所述中线数据分类为惟一元素数据和公共元素数据包括识别定义了公共图案的中线数据;识别定义了惟一图案的中线数据;针对定义了公共图案的每个已识别中线数据,根据公共元素标识符,对定义了公共图案的已识别中线数据进行分类;以及针对定义了惟一图案的每个已识别中线数据,根据惟一元素标识符,对定义了公共图案的已识别中线数据进行分类。
32.根据权利要求31所述的方法,其特征在于将所述惟一元素数据和所述公共元素数据与所述多个字形中的每一个字形相关联包括将所述公共元素标识符和相应的解译数据存储在字形数据结构中;将所述惟一元素数据存储在所述数据结构中;以及将所述公共元素标识符和所述公共元素数据存储在公共元素数据库中;其中由所述解译数据进行解译的相应公共元素数据和所述惟一元素数据定义了字形形状的多边形骨架。
33.一种根据源字体数据创建字体格式数据的系统,包括用于分析源字体数据以获得多个字形的字形数据的装置;用于解析所述字形数据的装置;用于从解析后的字形数据中提取出中线数据的装置;用于将所述中线数据分类为惟一元素数据和公共元素数据的装置;以及用于将所述惟一元素数据和所述公共元素数据与所述多个字形中的每一个字形相关联的装置。
34.一种存储在计算机可读介质中的字体数据结构,包括公共元素数据库,包括公共元素标识符字段和描述数据字段,所述公共元素标识符字段操作用于存储公共元素标识符数据,以及所述描述数据字段操作用于存储定义了公共元素形状的描述数据;以及至少一个字形数据结构,包括至少一个公共元素记录,所述至少一个公共元素记录包括公共元素标识符字段和解译字段,所述公共元素标识符字段操作用于存储与存储在所述公共元素数据库中的公共元素相对应的公共元素标识符数据,以及所述解译字段操作用于存储用在解译所述公共元素形状中的解译数据。
35.根据权利要求34所述的字体数据结构,其特征在于所述至少一个字形数据结构还包括具有惟一元素标识符字段和描述数据字段的惟一元素记录,所述惟一元素标识符字段操作用于存储惟一元素标识符数据,以及所述描述数据字段操作用于存储定义了惟一元素形状的描述数据。
36.一种存储在计算机可读介质中的字体数据结构,包括用于存储多个元素的公共元素标识符和公共元素描述数据的装置;用于将所述公共元素标识符数据和所述公共元素描述数据与多个字形相关联并用于解译针对所述多个字形中的每一个的所述公共元素描述数据的装置。
37.一种从已存储的字体数据再现文本的系统,所述系统包括存储在计算机可读介质中的字体数据结构,所述字体数据结构包括多个字形的公共元素数据和惟一元素数据;再现软件模块,存储在计算机可读介质中并包括计算机可执行指令,操作用于使计算设备访问所述字体数据结构,并根据所访问的公共元素数据和惟一元素数据,显示字形;以及移动设备,包括计算设备和存储器,所述存储器操作用于存储所述字体结构数据和所述再现软件模块,以及所述计算设备操作用于执行所述再现软件模块计算机可执行指令。
38.根据权利要求37所述的系统,其特征在于所述字体结构包括公共元素数据库,包括公共元素标识符字段和描述数据字段,所述公共元素标识符字段操作用于存储公共元素标识符数据,以及所述描述数据字段操作用于存储定义了公共元素形状的描述数据;以及至少一个字形数据结构,包括至少一个公共元素记录,所述至少一个公共元素记录包括公共元素标识符字段和解译字段,所述公共元素标识符字段操作用于存储与存储在所述公共元素数据库中的公共元素相对应的公共元素标识符数据,以及所述解译字段操作用于存储用在解译所述公共元素形状中的解译数据。
39.一种存储在计算机可读介质中的实体数据结构,包括公共元素数据库,包括公共元素标识符字段和描述数据字段,所述公共元素标识符字段操作用于存储公共元素标识符数据,以及所述描述数据字段操作用于存储定义了公共元素形状的描述数据;以及至少一个实体数据结构,包括至少一个公共元素记录,所述至少一个公共元素记录包括公共元素标识符字段和解译字段,所述公共元素标识符字段操作用于存储与存储在所述公共元素数据库中的公共元素相对应的公共元素标识符数据,以及所述解译字段操作用于存储用在解译所述公共元素形状中的解译数据;其中所述实体是可视显示实体。
40.根据权利要求39所述的实体数据结构,其特征在于所述至少一个实体数据结构还包括具有惟一元素标识符字段和描述数据字段的惟一元素记录,所述惟一元素标识符字段操作用于存储惟一元素标识符数据,以及所述描述数据字段操作用于存储定义了惟一元素形状的描述数据。
41.根据权利要求40所述的实体数据结构,其特征在于所述实体是字体实体。
42.根据权利要求40所述的实体数据结构,其特征在于所述实体是地图实体。
全文摘要
一种根据源字体数据创建字体格式数据的方法,包括分析源字体数据以获得多个字形的字形数据;解析所述字形数据;从解析后的字形数据中提取出中线数据;将所述中线数据分类为惟一元素数据和公共元素数据;将惟一元素数据和公共元素数据与所述多个字形中的每一个字形相关联。
文档编号G06T11/20GK1679021SQ03820069
公开日2005年10月5日 申请日期2003年7月3日 优先权日2002年7月3日
发明者瓦迪姆·富克斯, 丹尼斯·N·费多坚科 申请人:2012244安大略公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1