产生比例合适的字形数据的方法

文档序号:92582阅读:1070来源:国知局
专利名称:产生比例合适的字形数据的方法
本发明涉及图形的影象处理技术,特别是涉及到一种能够非常真实地按照合适的比例来产生字形数据的方法。这一方法能以各种不同的分辨力和不同点尺寸提供位-图字形数据。
在数控机床上图形的影象表示问题是经常碰到的问题。图形的影象均是假想的,而且一般用“模拟”形式执行,该模拟形式具有连续的平滑的流动线,有无限多个角度值,而且在其内部结构尺寸上有细微的变化。
图形影象的研究和用墨水在纸上画点阵同样简单,这就意味着沿轮廊线上测量无限多个角度值,轮廊线以360范围把点阵完全包围在内。与此类似,在该点阵的无限多个位置处,可以取无限多个测量值。
但是,这样一种用图形的影象要以数字形式表示时,有些地方的外部特征要受到某些主要限制。首先,在一个两维座标面内对位置的有限集之间进行测量时,无限多个结构尺寸及其细微变化可以用结构尺寸的离散集表示。其次,在很多数字系统中,只存在两个离散角垂直角和水平角。
在上述限制条件下,人们只能产生一个点阵的“幻影”,而它的尺寸、平滑度和位置都将是经过折衷处理的。该幻影的满意程序(或者说,影象的折哀处理程度)与如下两个因素直接有关第一,数字系统的分辨力决定了可寻址的位置的数目,因此,也决定了有利于实现幻影的可表示的结构尺寸的数目。分辨力愈高,幻影的质量愈高。
第二,用来表示幻影的关键角度、线段、和内部结构尺寸的选择是否合适,对幻影的满意程度影响很大。在上述点阵的例子中,为产生该点阵的幻影而建立起的关键点可能就是它的高度和宽度。但是,在方形点阵和圆形点阵之间,并无本质的区别。因此,圆形点阵的幻影可能就是缺了四个角的方形点阵演变而成的。在这种方法中,除垂直角度和水平角度以外的任何其他角度的幻影都已经能产生。
当要对数字定义的影象确定合适的比例时,将出现额外的复杂情况。这主要是指影象要从一个数字系统转向另一个数字系统(也就是说,从一个幻影转到另一个幻影)。
这些数字影象可以以定义影象边界的轮廊线方式存在;也可以以填满影象内部的点阵或划线的方式存在。但不管是那种情况,其基本问题是一样的。无论是那一种表示法都可以定义图形的影象而不会损失某些细节。确定影象的比例时将使细节有所损失。从轮廊线转换到划线,以及从划线转换到轮廊线,都将使细节受到损害。
由于人们主要关心的是产生密集的充填影象,下面介绍的内容基本上局限在图形影象内部所填充的点阵或划线的产生方法上。基本上有两种方法产生多种尺寸的密集充填的图形影象。
第一种方法是利用由划线或点阵组成的数字表示法,已经能精心地利用该法来组成影象的最佳幻影。然后在大比例时将划线或点阵图形重复多次,在缩小比例时,去掉一些划线或点阵,就可以完成比例选定工作。在确定那些点阵或划线在按所要求的比例尺寸下生成最佳幻影时是关键值时,就要引起上述问题。因为与原来的“模拟”图形的影象有关的重要信息正在逐步损失掉,所以这种方法不能产生质量最佳的影象。
第二种方法是将数字影象最初定义为轮廊线,然后选定该轮廊线各部份的比例,并且从数字概念上“充填”上划线或点阵。如果描述原来的轮廓线时具有足够多的细节,那么所得的幻影就比较好。但是因为采用轮廓线只能是作为一种空心壳体方式的描述,同时划线或点阵只表示一个数字系统,则其尺寸、位置、平滑度和影象的内部结构尺寸都应再一次进行折衷选取。将“模拟”影象变换成数字形式时不可避免地要引起误差,因而将产生难以预期的结果。
在图形输出装置上,作为图形的影象的字符输出(为字母形式)要求对数字影象选取适当的比例。如果在描述字符的轮廊线时要求有足够高的分辨力时,人们就可以把数字影象认为是“模拟”式的。也就是说,它没有很大的细节损失。为生成低分辨力的输出的划线或点阵,选取数字表示法的比例时要作某些特殊的考虑,才能生存最佳的字符幻影。下面对比例适当的字形设计用的系统作出基本描述,字符比例可以在各种不同尺寸和各种不同的输出分辨力下选取,只要能仍然保持最佳的字符设计。
本发明是一种具有真实比例的字形数据处理方法,它能以各种分辨辨力和任何点尺寸提供位-图字形数据。本发明简化了美学上的一些问题,这些问题在通过标准的线性法将字符的轮廊线描述按数学比例降到很低的分辨力和点尺寸时要碰到。根据本发明,委托给字符数据库来得到的改善了的比例率(1)、在字符轮廊线上的某些关键点(把它们命名为骨架点)以及在这些骨架点之间的专门指定的字符结构尺寸。(2)、当字符已定好比例,并且转移到位-图上时,这种附加数据根据对结构尺寸关系内进行必要的控制,以提高确定比例的算法。
本发明利用了一种方法,用这种方法将字符的轮廊线“展宽”和“压缩”,使轮廊线上某些特定的点(骨架点)和“位-图网格”适当地对准。这种概念的数学基础是如下三种方法中的一种(1)、将字符的轮廊线截成许多小段(在一对骨架点之间截取);(2)、在所截线段上,全部填补上座标,使第一骨架点和上述网格对准;(3)、按比例因子对所截线段取线性比值,使第二骨架点和网格对准。
但对一个分辨力很低的器件的字符确定比例时,在下述情况下要碰到美学问题(1)、罗马字符由划线组成;(2)、划线一般是水平的和垂直的,以使越过该页码时能保持音节或笔法平稳;(3)、字符线段的一般取向为,与输出器件在上述页码上输出点阵的方向平行或垂直。这个问题可以认为是和经过二次分筛时的半色调影象所碰到的问题类似。如果经二次分筛后的角度和原来分筛的角度匹配,就能得到一个有干扰波纹的图型。为减少波纹效应,要改变两次分筛的角度。根据这一点就能解释为什么在斜体字样和其他对角线字形的词干线条粗细表现出很小的变化,同时也可以从理论上解释为什么对除临摹、素描、反临摹和反素描之外的所有其他角度下的那些词干线条粗细很少需要控制。
本发明的一般的目标主要是提供比例适当的轮廊线数据。
本发明的一个特定目标是提供比例合适的真实的字形数据,由这种数据能够产生不同分辨力和任何点尺寸的位一图字形数据。
本发明另外一个目标是提供一种字符数据库,数据库包括字符轮廊线上的许多关键点,也包括在这些关键点之间的字符的内部结构尺寸。
本发明的第一个特点是,字符数据库规定了在每个字符格式内的有关的字符点、线段及其美学关系的子结构,所以当字符格式在位一图产生过程中发生变化时,仍能保持字符的完整性。
本发明的第二个特点是,规定字符的结构尺寸的控制具有优先权,即在处理树形结构内的有关字符的点和线段的顺序排列中优先。
本发明的第三个特点是,字符格式的子结构点和子结构线段均与网格对准,同时利用规定的非网格对准,来控制对角线形式的字符的划线角度。
本发明的第四个特点是,当要求精确地显示那些可能已经设计成字符形式的结构尺寸的任何变化,而且输出位一图的分辨力足够高时,结构尺寸的控制将自动失效。
本发明的第五个特点是,由规定的Y分类或分区将字符轮廊线分成小段,使所有落在某个指定区域内的字符点或线段都看成是一致的。
本发明的第六个特点是,在同一个字符点上的树形数据结构的各个独立的根和枝在收敛时要产生矛盾,在该字符的座标表内加进一个附加点,可以避免矛盾,所以这个附加点就成为与一条枝或一个根所附属的,而原来的点则仍然保留和其他枝或根所附属。
本发明还有一个特点是,沿已经定好比例(“展宽”以后或“压缩”以后的)的字符轮廊线方向上的那些小段具有很大的反差,使字符点或线段能在输出网格的背景上移动。
本发明所指出的这些目标和其它一些目标及特点要完全掌握,还得通过附图中所表明和所示出的最佳实施例的详细描述来达到。
图1表示原来的字符,它由一组围绕字符轮廊线按顺序填入的X/Y组对所确定。
图2表示图1的字符处置,整过字符的Y值经处置后,使Y线段的绝对位置处在平稳的输出象素或Y网格线上。
图3是表示字符轮廊线的处置图,处置是通过骨架信息的应用和处理,产生位一图之间的最佳转换。设计图3所示的图形是为了叠加在图2的字符上。
图4表示经过平移和对准后的图2的字符,处置时将骨架点及有关的其他点均经过适当地移动,同时只沿X轴进行网格和非网格对准,而字符轮廊线上所有其他点均通过移动和确定线性比例来重新定位,这样就能保持平滑的轮廊线。
图5表示由网格对准所建立起的骨架点和结构尺寸的有关程序。设计图5所示的图形是为了叠加在图4的字符上。
图6是非网格对准所建立的骨架点和结构尺寸的有关程序的图形。设计图6的图形是用在叠加在图4的字符上的。
图7是表示沿Y-网格轴上的字符轮廊线的处置情况,而且将叠加在图8上。
图8表示经过图7所示的描绘处置之后的字符。
图9是表示在Y-网格轴上的骨架点和结构尺寸有关的程序图形。设计图9所示的图形是为了将它叠加在图8的字符上。
对本发明的过程的很好了解必得首先描述与本过程有关的理论及述语。经此之后,在描述该过程时要联系到该过程的一个应用特例,即示明一个字母K的修改过程用的一序列附图。最后,为完成该过程用的Fortran源代码将是前一个集。
过程理论和述语1.0过程控制本发明过程改善了由于孤立地确定某个特定比例所引起的比例问题,并提出如下的控制措施。
1.1网格对准平滑的字符轮廊线变换到离散的象素时,经常要引起轮廊线变平垣或者出现“孤寡”的象素。按照本发明,可以用一种方法完成这一变换,这种方法是将相邻的划线“布置”成最佳长度,以产生可能的最佳轮廓线表示。要完成这种表示,可将轮廓线上的特点对准点或者特定的非对准点与所建立起的网格对准。这里所用的术语网格,是指一系列的水平线和垂直线,它们相交于输出装置上的所有可寻址的点阵的中心。显然,这种网格的疏密程度是随字符轮廓线在确定比例时的点尺寸和输出器件的分辨力而变化的。一般来说,大部的X值的极值和Y值的极值必须与网格适当地对准,而主要的斜纹划线并不要求对准。
1.2字符相对于基线和高度等的内部顺序为得到光学的一致性,将字符轮廊线故意设计成为略有“差异性”的字符,鉴于这一原因,通常对字符高度、基线等进行失控的舍入,才能产生失准的字符。因此,在字形的某些关键的水平线上应当建立起有关控制的准则。建立准则的要求是,要使内部字符的形式保持正确的内部比例。
为了这一原故,将沿字符轮廊线的某些线段连接起来,以便确定每行文本中从头一个字符到最后一个字符水平布置的“区段”(Y-分类)。典型的区段是由基线和X-高度上的Y-值所定义的。落在该区段的所有内部字形都确定为垂直方向上的比例,这样就能使代表基线的Y-值落在所规定的基线象素,同时使X高度上的Y值满足X-高度的象素的要求。
1.3X/Y的内部尺寸在设计中,某些内部尺寸只要所取比例适当,就应保持协调(相对于另一个)。然而,由于舍入误差的影响,这样一些内部尺寸关系经常会失调。因此,在确定比例时,要提供一种控制内部尺寸关系的方法。
内部尺寸的建立一般是连接一对有关的骨架点和“测出”在它们之间的输出装置的象素的数目。在这种方法中,允许内部尺寸按照要求向上或向下舍入(也就是说用最佳象素数目来表示)。但是,某些关键字符的内部尺寸必须进行附加的控制,才能保证视觉和其他关键字符形式协调,例如和字符的词干、宽度和衬线等协调。这种协调可以是在一个字符之内,也可以一个字符与另一个字符之间的协调。要完成这一工作,只要连接一对有关的骨架点和另外规定一个可控的内部尺寸,利用这个尺寸将他们连接起来。例如,定义字符词干左侧的骨架点连到该字符词干右侧上的骨架点上,然后对字形中的所有词干建立起可控制的内部尺寸,来确定每个比例时刻的这两个骨架点之间的距离。
由于字符经常设计成有很小的不协调性,才能使它们在高机辨力器件上输出时具有光学上的“校正”,本发明可提供一种方法,当分辨力对准确定显示内部尺寸变化已足够时,利用这种方法可以“消失”可控制的内部尺寸。这种方法称为“1 1/4 象素消失”技术。
1.4以比例时间确定可控制的结构尺寸建立可控制的内部结构尺寸所用的方法是,将字符轮廓线描绘所作的测量值转换成该结构尺寸最佳表示所需要的输出象素的数目。但是,在确定结构尺寸中某些微小变化会可能引起象素表示中的重大变化(起因于舍入误差),必须调整某些可控制的结构尺寸。由于这一原因,应具备一个系统,通过该系统,可以把一个可控制的结构尺寸作为标准建立起来,所有其余的结构尺寸就不根据它对该标准的变化情况而建立。采用这种方法,该标准的确定对输出设计的总“线条粗细”有所影响,同时这个“线条粗细”在整个字形上要保持恒定。
1.5字符关系的程序确定在确定比例时,并不是字符的所有结构尺寸都可以控制。有些是允许改变的,这样才能使另外一些结构尺寸保持不变。例如,假如小写字母“n”的两部份词干和总宽度受到限制,那么就必须允许字符的轮廊线和它原来的设计有所改变。否则,就会出现一个难以解决的矛盾。但是,最好的办法是采取某种折衷,也就是说,在某些结构尺寸上进行部份限制来控制字符的结构尺寸。通过连接程序或有关骨架点就可以确定这点。因此,正如在数据描述一节中所指出的那样,在完成骨架处理中所采用的程序是非常重要的,而且要由设计师规定。
1.6斜体字斜体字提出了一个特殊的问题或“挑战”。网格对准和控制结构尺寸的概念将难以严格地应用到斜体字的设计中,其原因是,这些概念的XIN(256),YIN(256)-比例确定之前描述字符轮廊线的坐标表。
NUMI-表中的坐标数(目前最大值为256)。
IPEN(256)-XIN、YIN坐标的Y-分类赋值。
普通/字符输出/XOU(256)、YOU(256)-经输出网格对准操作之后的描述字符轮廊线的坐标表。
2.2骨架数据描述骨架数据为确定合适的比例提供“信息”。它可以分成几种类型,每种类型和上面提出的一个概念或几个概念相对应。
a)骨架点本发明过程的基本概念就是“骨架点”。这些点是描述字符轮廓线所用的坐标的子集,同时由于这些点要求和输出位-图网格进行有控制的对准,所以这些点都是从坐标表中选出来的。骨架点通常都是X的极值和Y的极值。它们存在于两个集中X-骨架点在X座标上求取、Y-骨架点在Y-坐标上求取。
b)关连骨架点“关连点”包括所有骨架点的子集。事实上,由于骨架点通过它们之间的相互联系形成“树形”的连接,所以大多数骨架点都是关连骨架点。相互联系只能是在一个方向上的(朝向分支的方向),也就是说,当骨架点变换时,它们的关连骨架点也要发生变换。如果关连点没有额外的变化,则对它的关连-或(朝向根的方向)并不产生影响。总的来说,一个骨架点可能有一个以上的关连点,但是,任何一个关连点都不可能是一个在双根系统中的关连点。
根据这个理由,当处在特殊情况下,要求有两个独立的根才能在同一关连点上“收敛”时,就有必要自动地插入一个重复点。用这种方法应用,取决于骨架点之间的轮廊线线段的局部比例如何确定才能提供对准和控制。然而,这些布局比例的确定,可能导致斜体字的倾斜角在字符之间变动,甚至在一个字符之内也要变动,从而产生光学上的扰动结果。
因此,在斜体字形时要采取特殊的方法,这个方法是上述所有概念的综合,但是只能进行不多的控制,除此之外,斜体字字符在上述处理过程中的第一步必须进行非斜体化,然后再重新斜体化。其结果是斜体角度被保留下来,轮廊线上的各个关键点是经过网格对准的,某些结构尺寸也是可以控制的。但是某些相邻的划线的“处置”长度并不是最佳的,故要产生某些不合要求的“平直”和“窗口”般的象素。
2.0数据描述根据本发明来确定比例,其成败的基本依据是正确地确定数据。这种数据由两个主要的数据段组成(1)、限定字符外的字符轮廊线(或轮廊线系);(2)、控制字符轮廊线的比例的“信息”。下面给出采样数据。
2.1字符轮廊线数据只要每种轮廊线是连续的和封闭的(也就是说,轮廊线的末端必须与始段相交),则字符轮廊线可用任何一种方法描述。为了存储本例子中的字符轮廊线,已任选择使用矢量/样条点表示法。这种表示法将是一种真实地独立解法,使其有可能在某种特殊应用中产生适当详尽的矢量周线。
低分辨力输出器件时所形成的位一图的最终质量与轮廊线描述的质量有关。
下面是用来描述字符轮廊线所提出的数据阵列。
普通/字符输入/
所标识的点就成为两个独立的点,每个点都有它自己的根。
c)对准属性并不是所有骨架点都力图与网格对准。未对准就使它有可能将主要对角线上的字符划线维持某个角度和线条粗细。它也允许沿字符轮廓线的有界比例线段上简单地赋予一些骨架点。因此,每一骨架点都具有一个对准的开关属性,与此对应的集是“通”或“断”。
d)X和Y的结构尺寸在骨架点和关连骨架点之间的每一段连接均是通过某个所建立起的结构尺寸完成的,可能是零结构尺寸(在此情况下,象素内的输出结构尺寸实际上直接由输入轮廓线结构尺寸经过入后确定),也可能是从预先建好的X或Y结构尺寸表中选择的某个结构尺寸。此时应当注意,X和Y结构尺寸表示应具有和在输入单元内所测出的那些结构尺寸(也就是说,用它们来确定上述字符的轮廓线)。这些结构尺寸以比例因子转换后,能够表示成与网格象素结构尺寸相对应的结构尺寸。X和Y的结构尺寸可以以全局结构尺寸的方式存在(在这种情况中,整个字形都采用某些规定的结构尺寸),也可以以局布结构尺寸方式存在(在此种情况下,只能在某一个字符内采用某些规定的结构尺寸)。全局结构尺寸以字形方式存储,而局部结构尺寸以每个字符的方式存储。
e)Y-分类用来描述字符轮廓线的每个坐标均在文本的一行内连接成水平移动的“区段”。Y-分类数据由两部份组成(1)Y-分类或“区段”的确定;(2)坐标赋值。Y-分类由两个Y-值确定,一个Y-值在顶点,另一个Y值在底部点。例如,所有小字体字符的Y-分类由两个Y-值确定,一个是基线的Y-值;另一个是小字体字符高度的Y-值。因此,那些必须相对于这两个Y-值定位的所有轮廓线坐标都连接到或分配到这一个Y-分类上。与此同时,在同一字符内还可能有一个附加的要求,才可能使字符的下行文字对准。基线和下行文字底部之间的“区段”定义为Y-分类,而描述下行文字的轮廓线上的坐标则被分配到该Y-分类上。
正如在X和Y结构尺寸的情况中那样,在输入单元内建立起确定的Y-分类,然后转换成有一定比例因子的输出象素。
f)斜体字的斜角为对斜体字形进行某种特殊的处理,每个字符的斜角与字符的骨架点数据一起存储起来。在处理所有Y-坐标的过程中,也就是说通过Y-坐标处理来防止在最后的输出中的斜角的任何变化的过程中,可以用这个斜角对字符进行“非斜体化”。
除此之外,在字形中的大斜角在整个字形情况下要进行全局存储。经过Y-处理后,又用这个角度对每个字符重新进行“斜体化”。在这种方法中,在每个字符之内将斜体角设计成稍有变化,就可消除低分辨力时的视觉差异。
g)处理顺序骨架点处理的顺序直接列成表格。该表的次序必须仔细排妥,才能保证轮廓线上那些最重要的点的位置首先确立。然后才确定那些不甚重要的点的位置。可以认为,轮廓线上最重要的那些点的选择(也就是表中顺序的确定)是一个设计选择问题。
下面是“确定比例的信息”时,目前所用的数据变数的定义普通/参数/XPIX,YPIX-X和Y象素的结构尺寸(网格线之间的距离),以输入字符轮廓线的坐标单位来量度。根据输出的分辨力和点尺寸以及根据基本数据,可以按比例因子对它们进行计算。
普通/骨架/NLOOP-在这一字符中的闭合回路轮廓线的数目。
LPEND(20)-在每个闭合回路轮廓线内,最小XIN、YIN坐标的指数组成的阵。
NCLAS-在字符内Y-分类或水平“区段”的数目。
ICLS(10,2)-Y-分类的定义域。
(N.1)-Y-分类“区段”的底。
(N.2)-Y分类“区段”的顶。
NUMS-骨架点数目(最大值=96)。
ISK(96,10)-由表征骨架点坐标、相关性和结构尺寸等的指数组成的骨架阵。(N.1)-定义骨架点的XIN、YIN坐标阵的指数(N.2)-与该骨架点有关连的骨架点的数目。
(N.3)=1(如系X骨架点)=2(如系Y骨架点)(N.4)~(N.10)-关连骨架点的指数,它由对X或Y可控的结构尺寸的指示字综合得到(在ASSOCY.FIN.中进一步介绍)。
IXDIM(32)-指向关连骨架点的X可控制的结构尺寸。
IYDIM(32)-指向关连骨架点的Y可控制的结构尺寸。
普通/斜体/ANGIT-该字符的斜体角GLANGT-整体的斜体角(所有字形的平均值)。
3.0操作程序在用二进制的“位”生存轮廓线之前,根据规定的点尺寸和分辨力来调节字符轮廓线的程序步骤由下面给出。
3.1建立输出点尺寸和分辨力为计算“位一图”网格的象素X和Y的结构尺寸,要利用输入字符轮廓线数据和输出“位一图”数据两者的点尺寸和分辨力。这种转换的细节在下面的INPNCS.FTN中给出。
3.2送入数据将字符轮廓线数据和骨架点数据两者均送入存储器中,在下面的LOADCH.FTN和LOADSK.FTN中提出内部数据格式的细节。
3.3非斜体化如果将字符归类为斜体字(由于存在除零以外的一个角度),那么,在任何处理进行之前只要能够建立起角度,就必须完成非斜体化。在下面的UNITAL.FTN中介绍它的细节。
3.4Y-分类处理在字符轮廓线内的各个确定的线段都要单个地确定比例,才能在规定的Y-分类之内提供对准和保持正确的内部比例。在LPSCAL.FTN中介绍它的细节。
3.5将X和Y的结构尺寸转到输出象素上建立起来的整体的和局布的结构尺寸都以输入数据单位(描述字符轮廓线的单位)来定义的。每一个输入数据单位都必须转换到以象素结构尺寸为基础的输出象素上,正如在INPNCS.FTN.中所建立的那样。在下面的DIMPIX.FIN中提出更详细的解释。
3.6Y-网格对准和Y-关连和网格对准或者不对准,都要通过Y-骨架点的处理,正如由对准属性开关所规定的那样。当每一个单独的骨架点向上移动或向下移动时,它的关连骨架点也要移动同一量值。这一过程要一直进行到Y-骨架点表内的值全部完毕时为止。在下面的GRYAJ.FTN/GRXAJFTN和ASSOCY.FTN/ASSOCX.FTN。中将详细介绍。
3.7两骨架点之间的线段的Y-处理由于骨架点是定义字符轮廓线的坐标的子集,所以可将它们作为字符轮廓线上各线段终点的标志。必须将这些线段“扩展”或“压缩”,才能使骨架点与网格适当地对准,并且仍然能保持平滑和完美的轮廓线。要做到这一点就应对两个单独的处理过程中的Y-线段求取线性比例。在XPROC.FTN/YPROC.FIN.中将介绍它的细节。
3.8斜体化在适当的时候,字符要再一次斜体化,在下面的ITALIC.FTN中详细介绍3.9X网格对准和X-关连在重新斜体化之后(如果合适时),和网格对准或者不对准,都要通过对X-骨架点的处理,正如在对准属性开关所规定的那样。当每一个单独的骨架点向右或向左移动时,它的关连骨架点也要移动同一量值。这一过程要一直进行到X骨架点表内的值全部完毕时为止。在下面的GRXAJ.FTN/GRAJ.FTN.和ASSOCX.FTN/ASSOCY.FTN中将详细介绍。
3.0两骨架点之间的线段的X-处理由于骨架点是定义字符轮廓线的坐标的子集,所以可将它们作为字符轮廓线上各线段终点的标志。必须将这些线段“扩展”或“压缩”,才能使骨架点与网格适当地对准,并且仍然能保持平滑和完美的轮廓线。要做到这一点就应对两个单独的处理过程中的X-线段求取线性比例。在XPROC.FTN和YPROC.FTN中详细介绍。
3.11 X移动在所得出的“位一图”字符中,产生最佳长度的相邻划线“运行段”的关键在于“适当地”使X和Y骨架与网格对准。当骨架的Y值可以由Y象素的结构尺寸平分时,Y骨架点的对准较为合适。当骨架的X值减掉X象素结构尺寸的一半,其所得值能由X象素的结构尺寸平分时,X骨架点的对准较为合适。为使处理简化,可以认为只要骨架的X值能由X象素的结构尺寸平分时就认为X骨架点已对准。因此,在处理这一点时,就必须把所有的X值增加一个距离,其大小为X象素结构尺寸的一半。在下面的NCSBLO.FTN中将详细介绍。
3.12 “位一图”产生在这一点上,对字符轮廓线的处置,就可以产生字符的外部轮廊的边界。如果填上二进制“位”,就可以得出该字符的一个极好的近似形。填充技术基本上是一种处理每个矢量的方法,它依顺序围绕最新建立起来的轮廓线,以X-网格线搜查各矢量的所有交点。所得到的交点就是划划线的转折点,换句话说,就是二进制位的极性转换到该划线内该二进制位和以后的几位的地方。由于完成了这个处理,就可能字符的所有垂直划线聚集在一起,每一个都包含一个Y象素的(转折点)的非分类的表。一当分类之后,所有奇数转折点都被认为是“通”划线运行段的起点,而所有偶数转折点都被看成是“断”划线运行段的起点。
4.0 本发明方法的特殊应用在本发明方法中的理论和述语的详细介绍之后,就有可能将本方法用在某种特殊应用中,例如在图1至图9中的字母“K”的图形处置。该图画在 1/4 × 1/4 网格图中,设计的目的是用来与另外一个彼此复盖。在图1至图9的每个图中只画出网格图的一部份。以便使复盖图能寄存到下面的图上。
现在看一下附图,原来的字符(字母“K”)如图1所示,它由该字符周围的列在表内的X/Y成对坐标所组成的集所限定。X/Y成对坐标则由节点表示,而节点则由图1中字符外部轮廓上的参考数字20表示。
轮廓线上某些特定的Y值关键的Y线上或落在其周围,也就是说,从字形内的一个字符到另一个字符均必须垂直对准的那些字符部份。本例子示明基线、X高度、增升高度、Y-线段(它们均与X轴平行)。
图2表示整个字符的处置情况,即为使Y-线段的绝对位置能够与一个平坦输出的象素或X轴网格线进行叠加。没有准确定在所建立的Y线段上的坐标都要重新确定,重新定位时采用了由它的赋值Y分类所决定的线性比例。由两个所建立的Y-线段的组合可以定义Y-分类。
在图2中,字符基线已经向下靠到最近的一根X轴网格线上,这样又使整个字符向下移动。那么X高度和增升高度也靠到最近的X轴网格线上。并由所指出的Y分类(A或B)来确定所有点的比例如何选取。
为了了解这些处置之后的效果,可以将图1中标有A的那些节点的相对位置和图2中A点的相对位置。应该注意,对字符的X-高度部份至关重要的那些节点都必须重新定位,才能使这些节点都处在基线上或在基线周围,同时使X-高度的位置正好在以基线象素或以X-高度象素表示的网格线上,或者在网格线周围。还应该注意,这些节点实际上并无必要处在由Y-分类所确定的两根Y-线段之间,正如图2中节点B1和和B2所示的那样。
图3表示为产生位一图的最佳转换时字符轮廓线的操作,转换时主要应用和处理骨架信息。这种信息定义了必须移动的关键骨架点,移动的目的是为了与输出网格确保一个特定的关系,同时还保证各相关点或关连点的特定结构,经处理后的这些关连点的位置就是最后移到相关的骨架点及其自身对网格的相对位置上。
在这种情况下,各特定结构尺寸间的一致性甚为重要,不同字符之间或甚至在一个字符之内,控制结构尺寸是从一个所建的表格中选取,以便抵消实际数据引入任何一种变化。在这一点上,唯一关心的是X轴内的处理情况。
在图3的例子中,(*骨架点是第一个对准的网格,图中用四分之一分格符号表示。利用骨架数据的结构树,可以得到在1*骨架点上的任何移动,都将作用在2#、3#、4#等关连点上。这些骨架点都用圆圈表示,骨架点的圆圈都有箭头从圆圈引出,但没有箭头引向圆圈,而关连点则有箭头引向其圆圈。网格对准了的点都用四分之一分格表示,而网格未对准的点都用空白的圆表示。对于关连点,要作如下的选择(1)、移动这些点中的每个点,然后对它们进行网格对准;(2)、只对它们进行简单地移动,但不进行网格对准;(3)、将它们从1点移动一个特定距离,如图中有控制的结构尺寸时的情况所示。
2#点和3#点经过处理,但他们的分支已经丰满。但是,在4#点经过这种处理之后,绕4#点引出的附加关连分支应作进一步的移动和和对准,如在图中所示的那样。应该提醒的是,利用结构尺寸G来控制1#点和2#点、3#点之间的距离,同时也能控制4#点和5#点之间间的距离,才能保证衬线长度协调一致。利用结构尺寸F来控制1#点和4#点之间的距离,才能保证在各字符之间的词干宽度协调一致。
还应该指出,10#点是不必进行网格对准的,只要作些移动,正如7#点和9#点处置时所决定的那样。只有这样才能保证7#点和10#点之间的对角轮廓线和9#点和10#点之间的对角轮廓线并不随角度变化。如果所有这些对角轮廓线的角度都保持不变,那么从词干的一侧到另外一侧时它们的关系仍将保持不变。这样就可避免字符划线可能出现不希望的锥聚现象。
收敛于同一关连点的两个骨架点之间存在明显的矛盾,同样一点可能往两个不同方向移动,利用控制这种收敛性的规则可以解决该矛盾。首先,不多于两个骨架点能够收敛在一个关连点上;其次,第二个轮廓线的坐标应插入同一位置的轮廓线坐标表内。
参见图4,在骨架点和关连点适当地移动并进行网格对准或非对准之后,轮廓线上的所有其他点则可通过移动和确定线性比例而重新定位,以便保持一个平滑的轮廓线。应该注意,10#点、15#点和6#点不仅必须分别用10A#点、10B#点、15A#点、15B#点和6A#点、6B#点代替,以便解决收敛性的矛盾,而且必须将它们适当地移动,才能保持对角线的角度。这样得到的字符如图4所示,它表示示已经调整到只沿X轴上的网格上以后的字符。
骨架点的关连程序对最终解是很重要的。如图5中的程序图所示“K”的垂直词干是被建立起的第一个字符结构尺寸,其后就是衬线的长度和字干右侧与字符右边最远点之间的距离。由于这一原因,字符的总宽度变成与衬线、词干和对角线等有关。那么,所有其它结构尺寸都与以前已经建立起的这些结构尺寸有关。
图6表示由非网格对准建立字符结构尺寸的程序。除此之外,设计这一图形可以作为与图4进行叠加时使用。
图7表示Y-轴上的字符轮廓线的处置情况。图8表示经过图7中Y-轴处置后的结果。
图9表示Y-轴的关连程序。应该指出,Y-轴的关连的相互依赖关系较弱。衬线高度控制是在相同的水平上实现,也就是说,每一衬线都是一个新根的起点,而且它不因以前处理过的衬线高度而有所改变。除此之外,还应当再次注意的是,要对各对角线进行处理,才能维持对角线的角度不变。
根据这一点应该看到,图1至图9表明了Y-线段的处理,然后进行字符的X轴处置,在此之后再进行Y-轴的处置。与此对应,上面讨论的理论部份向前置定它的操作反程序,也就是说先进行Y-轴处置,然后经过最初的Y-线段处理以后再作X-轴处置。在非斜体字符中,本发明方法的练习中无论那一种程序均可以使用。除此之外,对于非斜体字符,均可利用先X-轴,后Y-线段,最后进行Y轴处理的程序。
在斜体字符的情况下,只能使用一种处理程序,那就是先Y-线段,后Y-轴最后是X-轴。应该看到,在斜体字和非斜体字两种程序情况下,Y-线段处置必须在Y轴处理之前进行。
FORTRAN程序为练习本发明中的方法,设定的FORTRAN原码如下5.1 BLACK.FTN-确定比例用的操作字符轮廊线下面是处理单个字符的主要线段,通过整个骨架点(ISK)有两条路线第一条路线确定,并处理所有的Y-骨架点的基准值;同时确定第二条路线,并处理所有的骨架点的基准值。这个方法就没有必要在确定次序(参见X和Y的数据表)时提出骨架数据,而仍能保证在斜体字字形时被处理的数据适宜。
注在从(XIN.YIN)和(XOU.YOU)阵中取出轮廊线数据并进行分类或送到(XIN.YIN)和(XOU.YOU)阵的程序中可以得到基准值。这些值对(XIN和YIN)是FCHXY、STIPXY、STIRX和STIRY,而对(XOU.YOU)则为FCHOXY、STORXY、STORX和STORY。
普通/参数/XPIN、YPIN、XRESP、YRESP!黑色PIX结构尺寸参数NDMPAR=32 !结构尺寸数参数NASPAR=10 !关连点数普通/骨架NLOOP、LPEND(20)、NCLAS、ICLS(10、2)NUMS+ISK(256、NASPAR)IXDIM(NDMPARO)、IYDIM(NDMPAR)、NANG、ISKIT(128、3)普通/斜率/ANGIT、GLANGT普通/字符输入/NUMI、XIN(256)、YIN(256)!黑色输入普通/字符输出/MUMO、XOU(256)、YIN(256)!黑色输出
LUNSRD=1 !LUNS 对文件访问LUNCHR=2LUNSKL=3LUNOU=7ISTAT=0 !对SRDNXT调用状态IEN=0 !矢量阵完成的指示字调用INPNCS !操作者输入2、调用SRDBLX(LUNSRD、LUNCHR、LUNSKL ISTAT)!打开字符文件如果(ISTAT.GE.2)中止调用LOADSK(LUNSKL)!负载/骨架/以骨架数据调用LOADCH(LUNCHR、ICH、IL、IR、IB、ID、IU、NREC、IMIN、IMAX、MU)调用DIMPIX(XPIX、YPIX)!将测量的结果尺寸转换成象素根据这一点,实际处理回路是从IXYSW开关置于“Y”状态时开始。
IXYSW=2 !首先处理Y-骨架点5 ICS=1 !骨架点指示字
ICV=0 !骨架点开始ISTS=ICS !骨架点开始ICV=ISK(ICS,1) !第一骨架点25 继续如果(ISK(ICS.3).NE.IXYSW)进入55!SKIP、错误的坐标系调用FCHIXY(ICV.X.Y)!取出*输入*X.Y如果(1.EQ.IXYSW)调用GRXAJ(ICS,ICVX,XX.)!网格对准X如果(2.EQ.IXYSW)调用GRXAJ(ICS,ICVY.YY.) !网格对准Y如果(IXYSW.EQ.I)调用STORX(ICV.XX) !存储输出(差值)*如果(IXYSW.EQ.2)调用STORY!存储输出(差值)如果(ISK(ICS.2).EQ.O)送到55!没有关连点进行45LK=1、ISK(ICS、2)!回路通过所有关连点W/该点如果(IXYSW.EQ.1)调用ASSOC(ICS.LKX.XX) !处理关连点如果(IXYSW.EQ.2)调用ASSOCY(ICS.LKY.YY) !处理关连点45 继续55.ICS-ICS+1ICV=ISK(ICS.1)如果(ICV.NE.O)送到25!骨架处理是否完成?IENS+ICS-1 ! 这一回路的骨架点数只要骨架点的处理完成,指数设定为正,使以后的所有基准值更加直截了当。在YPROC和XPROC中,在两骨架点之间的轮廊线都被“展宽”或“压缩”,才能产生平滑的比例合适的字符。
进行65LS=1 NUMS!将所有负的骨架点设定为正如果(ISK(LS.L).LT.O和ISK(LS,3).EQ.IXYSW)ISK(LS、1)=ISK(LS.1)*-165 继续如果(IXYSW.EQ.1)送到75!第二次路径是X调用YPROC(ISTS、IENS)!“展宽”和“压缩”X-段如果(ANGIT.NE.O)调用斜体字IXYSW=1送到5 !回到对X的处理75 进行80 LS=1 NUMS如果(ISK(LS.1).LT.O)ISK(LS.1)=ISK(LS.1)*-1调用XPROC(ISTS.IENS)(调用XPROC(ISTS,IENS))!“展宽”和“压缩”X段80 继续由于X-骨架点实际上必须在网格线之间对准,应对X骨架表进行搜索,以得到X的最大值。用这个值来计算所有X值的偏差,就能使两网格线之间的X骨架点得以对准。
XXMNT=XOU(ISK(1,1))送到567 LS=1,NUMS如果(XOU(ISK(LS,1)).LT(XXMNT)XXMNT=XOU(ISK(LS.1)(不明瞭的).LT.XXMNT=XOU(ISK(LS.1))567 继续送到569569 HAFPIX= (XPIX)/2 -XXMNT调用NCSBLO(LUNOU.ICH.IL.IR.IB.IDIU.NREC.IMIN.IMAX.HAFPTX) !进行调用RQFIX(IXWCH(3)) !被调FIB(填充轮廊线)送到2 !更多的字符返回操作5.2 INPNCS.FIN-对规定的点尺寸和(或)分类力下的字符的实际比例的确定,是依靠将“位一图”确定比例来完成的,与其说利用“位一图”确定比例来完成规定点尺寸和(或)分辨力下的字符的比例确定,还不如确定字符轮廊线的比例。也就是说,使用X和Y网格线之间的较大的增量来产生较低的分辨力和(或)较小的点尺寸。
为达到此目的,必须有一种控制网格增量(输出器件的象素尺寸)的方法。应该指出,有两种独特的象素系统输出器件的象素系统(亦即在Canon激光打印机LBP-CX型上的300个象素/英寸)和输入数据的象素系统(亦即由Compugsaphic8600/8400型的排印机扫描用的1302个象素/英寸×1563个象素/英寸)。
因此,利用如下公式来确定网格的增量(输出象素的结构尺寸),并作为数据单元的测量值(输入象素)XPIX= ((INPTX×INRESX))/((OUPTX×OURESX))和YPIX= ((INPIY×INRESY))/((OUPTY×OURESY))式中XPIX-“位一图”的水平象素的结构尺寸INPTX-输入点尺寸(64点8600主机)INRESX-输入水平分辨力(1302线对/英寸)OUPTX-输出点尺寸OURESX-输出水平分辨力YPIX-“位一图”垂直象素结构尺寸INPTY-输入字尺寸(64点8600主机)
INRESY-输入垂直分辨力(1563线对/英寸)CUPTY-输出垂直点尺寸CURESY-输出分辨力子程序INPNCS普通/参数/XPIX、YPIX、XRESP、YRESP!黑色的象素结构尺寸参数NDMPAR=32 !结构尺寸数参数NASPAR=10 !关连点数普通/骨架/NLOOP、LPEND(20)、NCLAS、ICLS(10.2)、NUMS、ISK(256.NASPAR)*IXDIM(NDMPAR)、IYDIM(NDMPAR)、NANG、ISKIT(128、3)普通/斜字/ANGIT、OFFIT、HAFPIX写入(5,12)12 格式(′送入X-RES/PT Y-RES/PT′)读出(5,14)XRESP、YRESP14 格式(2F10.0)
XPIX=(64.*1302)/XRESPXPIY=(64.*1563)/YRESP返回操作结束5.3 LDADSK.FTN-负载骨架数据数据直接加载到合适的骨架数据区上。
输入LUN=逻辑单元数子程序 LDADSK(LUN)参数NDMPAR=32 !结构尺寸数参数NASPAR=10 !关连点数普通/骨架/NLOOP、LPEND(20)、NCLAS、ICLS(10.2)、NUMS、ISK(256).NASPAR+IXDIM(NDMPAR)、IYDIM(NDMPAR)、NANG、ISKIT(128,3)普通/斜体/ANGIT、GLANGT
NUMS=0读出(LUN.8)、NDIM(IXDIM(LS)、LS=1NDIM) !读出X-结构尺寸读出(LUN.8)NDIM(IXDIM(LS),LS=9NDIM+8)读出(LUN.8)NDIM(IXDIM(LS)LS=17NDIM+16)读出(LUN.8)NDIM,(IXDIM(LS)LS=25NDIM+24)读出(LUN.8)NDIM.(IYDIM(LS))LS=1NDIM) !读出X-结构尺寸读出(LUN.8)NDIM,(IYDIM(LS))LS=9NDIM+8)读出(LUN.8)NDIM,(IYDIM(LS))LS=17NDIM+16)读出(LUN.8)NDIM,(IYDIM(LS)LS=25NDIM+24)8 格式(1616)读出(LUN.12)NLOOP,(LPEND(LS)、LS=1 NLOOP) !读出回路完成12 格式(2116)
读出(LUN,12)NCLAS,((ICLS(LS)LSS=1,2)LS-1,NCLAS) !读出Y-分类读出(LUN.8)IANG !斜体字角度(*100)INGIT=IANGANGIT-TAN(ANGIT/100.*.0174533!角度=角度°100!存储角度的正切如果(IANG.EQ.O)ANGIT=0 !查明!10 NUMS=MUMS+1 !骨架计数输入读出(LUN.12.结束=1000)ISK(NUMS,1)ISK(NUMS.2)ISK(NUMS.3)+ISK(NUMS,LS+3)、LS=1 ISK(NUMS.2)1000 NUMS=NUMS-1返回操作结束5.4 LOADCH-负载字符的轮廓线单个字符由前-程序开启的文件加载。相对于其单独派定的Y分类的的坐标处理就可作为字符轮廓线的加载。相对标题数据也从该程序返回。
输入LUN=逻辑单元输出ICH-字符数IL-输入单元的左侧边界IR-输入单元的右侧边界IB-字符基线-当它是常量时(对1536Campugsaphic8600/8400型数据),可能不是有意义的。
ID-保留值IU-排字机单元值(单元宽度)NREC-输入象素宽度IMIN-保留值IMAX-保留值NUM-保留值子程序LOADCH(LUN、ICH、IL、IR、IB、ID、IU、NREC、IMIN、IMAX、NUM)普通/字符输入/MUMI、XIN(256)、YIN(256) !黑色输出普通/字符输出/MUMO、XOU(256)、YOU(256)
!黑色输出IC=O !初始坐标计数器IPNLAS=O !笔的最后值(Y分类赋值)读出(LUN.12,END=500)ICH、IL、IRIB、ID、IU、NREC、IMIN、IMAX、NUM、12 格式(1016)每一个坐标(IX、IY)是按照它的顺序数(NU)和他的Y分类(IPEN)从磁盘读出。IPEN代表坐标处在那一个Y-分类(1-10)上。但是,当用它表示一个新的回路开始时,IPEN值则为0。(当骨架数据中的LPEND阵同样地确定了一个闭合回路时,这个就成为多余的)。在IPEN是非零的情况下,坐标值是通过“确定回路比例”的LPSCAL,以便调整Y-分类对准的坐标。
50 读出(LUN.14,END=500)NU、IX、IY、IPEN14 格式(416)IC=IC+1XIN(IC)=IXYIN(IC)=IY如果(IPEN.EQ.O)进行到75
调用LPSCAL(IPEN、XIN(IC)、YIN(IC)、IPN(LAS)!使Y-SCAL改变送到50
75、如果(IC、EQ、1)送到80X1N(IMEMO)=X1N(IC-1) !起始等号完成YIN(IMEM)=Y1N(IC-1)80、IMEM=IC !存储开始送到50500、NUM1=IC !坐标数NUMO=ICXIN(IMEM)XIN(IC)YIN(IMEM)=YIN(IC)进行700 j=1、256XOU(J)=O !输出起始阵700、YOU(J)=O返回操作结束5、5 LPSCAL、FTN-在Y分类之内的字符调整如上所述,每一个字符在文本整个一行内的一个水平“区段”或一组“区段”内必须垂直对准。这些“区段”就是指Y一分类。每一个Y分类是限定在一对离散的Y值的顶点和底部点,由于它对所有字符具有特殊的重要性,故必须将它平稳地落在象素的边界上(网格线上)。其用意是能够对字符轮廓线的任何一部份进行垂直控制,它的位置(相对于这些Y值的位置)将影响文本字符之间的光学对准。最主要的Y-线段,如基线、顶尖部份的高度、底部水平线等,一般都要求确立这些Y-值。对位于它们“之间”的轮廓线进行补偿和确定比例,就可使所规定的Y-值与网格对准。
有必要将限定某个轮廓线的全部坐标在实际使用时都置定在两个一值间的Y一分类之内。通常在轮廓线中有一小段将被排挤在给定的Y-分类之外。但是,为了保证轮廓线平滑美观,被排挤出来的这一小段轮廓线也采用在Y一分类之内的那一段轮廓线相同的方法处理。
用下述程序来处理轮廓线上的一组坐标值。在每次调用中,新点(X、Y)根据其Y分类(IC)来确定偏差和比例,其Y-分类则由两个Y值ICLS(IC、1)和ICCAS(IC、2)所定义。因为轮廓线上其他后续点都要落在同一个Y一分类之内,而且只偶然出现变化,所以只有当轮廓线从最后的Y分类(ICLAST)进入到最新的((IC)时才需要计算偏差和比例值。
输入IC=最新的Y分类数X、Y-信号坐标集ICLAST-最后的Y分类数输出ICLAST-更新的Y分类数X、Y-新坐标位置子程序LPSCAL(IC、X、Y、ICLAST)
参数NDMPAR=32!结构尺寸数参数NASPAR=10!关连点数普通/骨架/NLOOP、LPEND(20)、NCLAS、ICLS(10、2)NUMS、ISK(265、NASPAR)OIXCIM(NDMPAR)、IYDIM(NDMPAR)、NANGISK1T(128、3)普通/斜体/ANGIT、GLANGT普通/参数/XPIX、YPIX!黑色象素结构尺寸注采用斜体字字形时,应考虑划线角度保持一致,字体在进行务何能改变Y坐标的处理之前必须完成“非斜体化”。
如果(ANGIT、NE、O)调用非斜体(X、Y)!斜体的正体化注如果Y分类偏差和比例因子已经计算出最新的Y分类,则跳过。
如果为(IC、EQ、ICLAST)则过到100。
为计算将Y值、(ICLAS(IC、2))值与网格对准时所需用的偏差和比例因子,我们必须准确地算出它和基线(在8600/8400数据中为常数1536)的偏差,才能使其与象素边界线平稳地对准。在这种方法中,首先必须准确测出Y分类高出基线的高度。其次应决定距Y分类所确定的Y值最近的那些网格线。最后要计算扩展上述两根网格线之间的字符轮廓线所用的比例因子。
IORIGN=1356/XPIX+5!测量距全部YCLASS的ORIGINORIGIN=IORIGN*YPIX-1536YBLINE-ICLS(IC、I)+ORIGIN!+使15263到BLPIX的偏差IBLINE=YBLINE/YPIY+5!将底部线调到与网格最近的地方BLINE=IBLINE+YPIXYCLINE=ICLS(IC、2)+ORIGIN!+底部线的偏差ICLINE=YLINE/YPIX+5!将顶部线调到与网格最近的地方CLINE=ICLINE*YPIXYSCA-(CLINE-BLINE)/(YCLINE-YBLINE) !目前的图形比例最后,由第一次计算的点的Y-分类(Y+ORIGN-YBLINE)可以决定在字符轮廓线内的新的Y坐标。确定它的比例最后加上新的Y分类底部的返回操作(BLINE)。
100 Y-(Y+ORIGIN-YBLINE)*YSCAL+BLINEICLAST=IC返回操作结束6、6UNITAL、FTN-用于Y-处理时的斜体的非斜体化有恒定的音节,又因为斜体字的竖直词干并不完全是垂直的,因此,在进行任何Y-处理之前,对每个字符进行非斜体化是必要的,如果这样做不成功,就应对字符内的主要倾斜角进行非控制调整。从而词干的一侧可能扭向某个方向上,而冈一个词干的身一侧可能扭向另外一个方向,得出一个锥形词干。
当字符进行非斜体化时,它的词干变成近似于垂直。调整如此的垂直词干的Y-值,对它的角度不产生影响。当完成全部Y-调整时,字符的斜体化如ITALIC.FTN所描述的那样。
下面的程序用于一对坐标的非斜体化。这种方法在技术上是将Y-值与斜体角的正切之积加到每个X-值上,来实现数据的“非扭过程”。
输入X.Y=描述单个轮廓点的一对坐标值子程序UNITAL(X.Y)参数NDMPAR=32 !结构尺寸数参数NASPAR=10 !关连点数目普通/滑架/NLOOP、LPEND(20)、NCLAS,ICLS(10、2)NUMS、ISK(256、NASPAR),+IXDIN(NDMPAR),IYDIM(NDPAR),NANG,ISKIT(128、3)普通/斜体/ANGITA′NGIT=TAN(ANGIT/100.*.0174533X=X+ANGIT*Y !新的XIN返回操作结束
5.7DIMPIX、FTN-可控制的结构尺寸转换为象素。
正象对输入数据定义的那样,企图用不同的方法将点立起来的X或Y的结构尺寸转换为适当数目的象素,以表示输出数据内的结构尺寸。方法似乎依赖于器件,在这种意义上也许使处理有所差别。各种方法取决于这类输出器件的性能,如分辨力、“点阵卷缩”、器件形成单一点阵的能力等等。下面的程序用在LBP-CX型CANON激光打印机是很好的,在光栅显示屏上产生好的结果。
因为垂直和水平的字符结构尺寸仅可能由离散的象素表示,所以,根本的方法是规定的尺寸(或X或Y)除以象素尺寸(象在INPNCS、FIN计算那样),并输入到最靠近的全部象素。其结果是存储在IXDM(NDMPAR)和IYDIM(NDMPAR)的结构尺寸由计算出最能代表它们的象素数目所代替。附加考虑条件见下文。
XPIX=X-象素结构尺寸YPIX=Y-象素结构尺寸(注X和Y象素结构尺寸不需要相同)子程序DIMPIX(XPIX、YPIX)参数NDMPAR=32 !结构尺寸数参数NASPAR=10 !关连点数普通/骨架/NLOOP、LPEND(20)、NCLAS、ICLS(10、2),NUMS、ISK(256、NASRAR),IXDIM(NDMPAR),IYDIM(NOMPAR),NANG,ISKIT(128、3)
普通/斜体/ANGIT、OFFIT、HAFPIXIXDIM(NDMPAR)=1IYDM(NDMPAR)=1 !非控制结构尺寸范围ISTART=11XSTAN=0 !X-标准(目前不用)IYSTAN=0 !Y-标准(目前不用)IXD=0 !(目前不用)IYD=0!(目前不用)进行100J=ISTART,NDMPAR-1IXDIM=IXDIM(J)-IXDIDIF=XDIM/XPIX+SIGN(.5,XPIM)IXDIM(J)=IDIF+IXSTAN可控制的结构尺寸可以永远不可能为0,在很小的一些尺寸上,帮助防止词干消失是需要的。
如果(IXDIM(J).EQ.O)IXDIM(J)=1YDIM=IYDIM(J)O-IYDIDFF-YDIM/YDIX+SIGN(.5,XDIM)IYDIMJ-IDIF+IYSTAN
注(1/2-1-1/4象素消失)如果计算出的Y-结构尺寸是一个象素,因为结构尺寸在1/2象素与1-1/2象素之间任一值,故可满足这种表示法的要求。因为特殊的结构尺寸一般仅在点尺寸和分辨力很低时得到一个象素表示,在这表示法中,在一个象素结构尺寸上偏差1/2象素是很容易被发现的,允许保持不舍入的结构尺寸是需要的。由于缺少足够的分辨率,故潜伏着非对准引起的字符轮廓线的某些衰减或降低。
如果(IYDIMJ、NE、1)IYDIM(J)=IDYMJ如果(IYDIMJ、EQ、1)IYDIM(J)=-IYDIM在上述关系式之后,如果任何结构尺寸都保持0,对于一个象素,它是“能实现的”。
如(IYDIM(J)、EQ、O)IYDIM=1100 继续返回操作结束5、8GRYAJ、FTN/GRXAJ、FTN-Y/X骨架点的网格对准Y和X骨架点的处理是相等的。虽然这里只以Y作为参数,但所提出的程序对X和Y两者都适用。
骨架点的树形结构保证每个骨架点最后送到这个程序。在这个程序中,要确定这个点是否与网格对准。为了与网格对准,要对网格对准(结非网格对准)影响进行补偿。当然,为了与网格对准,一个点是有偏差的。这种补偿也应对所有其他的关连点进行。然后才能将这些关连点与网格对准,同样,它们的单个补偿也应对各自的有关骨架点进行。输入ICSKL-ISK阵中的目前的指数(骨架点)IC-输入轮廓线和输出轮廓线阵(轮廓坐标)内的指数Y或X=在网格对准之前Y-或X-值输出Y或X=在网格对准后的新Y-或X-值DY或DX=补偿值(入端得到的Y值减去出端的Y值)子程序GRYAJ(ICSKEL,IC,Y,DY)普通/参数/XPIX,YPIX !变黑象素尺寸YY=Y!SAEOLDY调用FCHDXY(IC、XDUR、YOUR)取出前一次的补偿当一个点是不被网格对准(对准特征标志)时,为了指示,必须做出一些验证。正象在DIMPIX、FTN里所描述的那样,保证斜体角,对角线和1/2到1-1/2象素“消失”的一致性是需要的。当指数(IC)大于0时,利用轮廓线阵内的骨架点指数的符号就表明已对准当指数(IC)小于零时,表明为非对准。(注意当用IC的绝对值作指数时,必须小心)。
如果(IC、LT、O则送到100)在处理某一个点之前。应检查一下看是否已经提供了前一次的关连点-线骨架点来补偿目前的点(指数=绝对值(IC)),95Y=YY+YOUR !包括以前的调整依靠前一次的关连点-或骨架点得到相应的任一补偿之后,通过将Y值舍入到最靠近象素边界(如果合适),可使目前的点与网格对准(YOUR)加到Y值上,再除以Y-象素结构尺寸(YDIX),再加5,并进行舍项就可完成。将所得的象素(IY)数乘以象素结构尺寸(YDIX)从而得到网格对准值。为产生网格对准(DY)的实际补偿和新的网格对准值(Y)按照程序返回。
IY=Y/YPI)+5!调到靠近的象素上Y=IY*YPIXDY=Y-YY !目前通过的调量100继续在由直接相关的两个连在一起的骨架点中,至少有一个必须和网格对准。否则,出现不可预料的结果。因此,如果标记出非对准,那么对现在骨架点中的全部关连点必须进行检验,从而找出任一类似的非对准条件。
如果找到一个或几个条件,那么目前的对准标记是最优先的,那么该点,则是对准了的,而剩下的关连点(对目前而言)被标记为“非-对准”。其目的是,在树的已知“分技”中,如果找到一系列非-对准关连点,则只有“分技”的尾端实际将是非-对准的。
调用ASYSRC(ICSKEL、ISTAT)!检查其他非-对准的分技如果(ISTAT.EQ.1)进行到95 !ISAT=1=目前的对准点Y=Y+YOUR !非对准-关连点的保存DY=YOUR返回操作结束5、9ASXSRC.FTN/ASYSRC.FTN当一个骨架点(指数=ICSKEL)标记为非对准时,要完成一次检验,看一看它的关连点谁也没有被标记为非网格对准。这个条件可以以两种方式存在第一,以结构尺寸表示尺寸作为标记值。在本程序中,对这两种方式都要检验,当发现有时,数值1表示返回到ISTAT。如果不出现这种条件,O被返回。
输入ICSKEL-进入骨架点阵的指数输出ISTAT-在完成状态1=在这个分技内,有非对准点
O=在这一级上,没有非对准点子程序ASXSRC(ICSKEL,ISTAT)参数N-DMPAR=32 !结构尺寸数参数NASPAR=10 !关连点数目普通/骨架/NLOOP,LPEND(20),NCLAS,ICLS(10、2)、NUMS,(ISK(256),NASPAR),+IXDIM(NDMPAR),IYDIM(NDMPAR),NAAG,ISKIT(128、3)普通/斜体/ANGIT,OFFIT、HAFFIXISTAT=0如果(ISK(ICSKI,2)、EQ.O)返回 !该行结束进行100j=1,ISK(ICSKL、2)NDIM=(ISK(ICSKEL,j+3))/1000INDEX=ISK(ICSKEL,J+3))-NDIM*10000如果(IXDIM(NDIM).EQ-1)送到300 !发现1进行75K=ICSKEL,NUMS !查看骨架指示符号如果(IABS(ISK(K、1)).EQ.INDEX)送到8575 继续85 如果(ISK(K、1)LT.O)送到300 !发现负骨架点100 继续返回操作300 ISTAT=1返回操作结束5、10 ASSOCY·FTN/ASSOCX·FTN-利用关连保持字符结构尺寸一个骨架点可以有从0到7个关连的骨架点,关连骨架点的最后生标位置取决于该骨架点的坐标位置。在网格对准过程中,如果骨架点偏到左边,与则它对应的关连骨架点在网格对准之前同样偏到左边。另外如果关连点通过可控制的结构尺寸与骨架点连接,则关连点的最后坐标位置取决于骨架点的坐标位置可控制的结构尺寸。
当一个骨架点(指数=ISK(ICS、1))与一些点(ISK(ICS、LK+3))关连时,每一个的指数分别转到其有新坐标位置(Y)和新坐标位置与原来位置之差(DY)的这种程序(ASSOCY、FTN)上。
输入ICS-骨架点阵列中的指数LK-确定关连点的指示字Y-关连点-或骨架点的新位置DY-以GRYAT.FTN计算的老Y值到新Y值之偏差子程序 ASSOCY(ICS、LK、Y、DY)普通/系数/XPIX、YPIX、XESP、YRESP !黑色象素结构尺寸参数 NDMPAR=32 !结构尺寸数参数 NASPAR=10 !关连点数普通
/骨架/NLOOP、LPEND(20)、NCLAS、ICIS(10、2),NUMS、ISK(256、NASPAR)+IXDIM(NDMPAR),IYDIM(NDMPAR),NANGISKIT(128、3)普通/斜体的/ANGIT、GLANGTIYDIM(NDMPAR=1 !非控制的结构尺寸的Y值的最的最小极限YPIXYR=YPIX/100.*125 !控制消失的象素变量本方法把关连点的指数和控制结构尺寸的指数组合成一个字(ISK(ICS,LK+3))。因此,首先需要提取两个信息。
NDIM=(ISK(ICS,LK+3))/1000INDEX=(ISK(ICS,LK+3))-NDIM*1000!去掉结构尺寸表征码调用FCHIXY(INDEX、XI、YI !提取关连点坐标。
结构尺寸指数并不总是规定的,而且可以得到零结构尺寸。因此,输出象素的表达式直接根据输入轮廓线数据计算,也就是说,在适当补偿之后,由网格对准完成。
如果(NDIM.LE.O)送到1000 !零可控制的结构尺寸正如在DIMPIX.FTN中所表示的那样,一些结构尺寸处在1/2和1-1/2象素之间,并由非-网格对准轮廓线给出最佳表示。在DIMPIX中,这种条件由负可控制的结构尺寸标记,而可控制的结构尺寸并不舍入到最靠近的象素边界。在这种状态下,关连点(YNEW)放在隔骨架点指定的距离(IABS(IYDIM(NDIM))上。然后,查找与这个关连点的余项表,以得到该骨架点的参考值,当查到时,它的指数标记为“负数”,以表示非网格对准。当在GRYAJ.FTN中处理关连点时,这就表示网格已对准。
如果(IYDIM(NDIM).LT.O)送到3000 !网格末对准在大多数情况下,处理全部集中在这样一种点上,在该点上的关连点与骨架点间的距离为规定的象素数目,正如规定的结构尺寸(IYDIM(NDIM))所示。象元离散数目这个技术条件保证了关连点的网格对准。
100 YNEW=Y+(IYDIM(NDIM)*YPIX*SIGN(1.,(YI-(Y-DY))))然而,如果有足够的分辨率来表示YPIXVR偏离可控制的结构尺寸(IYDIM(NDIM)的变化,那么在GRYAJ·FTN处理时,可对关连点进行简单的补偿,并允许移动到最靠近的网格线上。这就称之为1-1/4象素消失。
700 如果(ABS(YNEW-(YI+DY)·GE·YPIXVR)送到1000710 YO-YNEW-YI !计算对准偏差调用STORY(INDEX、YO) !存储最后的对准偏差返回操作如果限制非控制的结构尺寸(零结构尺寸),同时实际轮廓线的结构尺寸是在1/2象素到1个象素之间,因此可以说它的结构尺寸“控制”在1个象素(IYDIM(NDMPAR)上。这就有助于防止处在低点尺寸和分辨力的字符部分消失。
1000继续如果(ABS(Y-DY-YI).LT.YPIX和ABS(Y-DY-YI)·GE·YPIX/2.)送到1010调用STORY(INDEX.DY)!假定落到靠近的网格返回操作200 NDIM=NDMPAR送到100 !最小结构尺寸控制=1象素3000调用INDSRC(INDEX、ICS)!查找指数YNEM=Y+IABS(IYDIM(NDIM))*SICN(1.,(YI-(Y-DY)))!调用新的非对准的逻辑送到710结束5、11 INDSRC.FTN-持定骨架基准的查找在ASSOCY.FTN或ASSOCX.FTN中,如果规定的骨架点不是网格对准的,在骨架表中(ISK(N.1)它的基准值必须记上“非-对准”标志。也就是说,它的基准值必须为负集。
子程序 1NDSRC(指数,ICS)参数 NDMPAR=32 !结构尺寸数参数 NASPAR=10 !关连点数普通/骨架/NLOOP、LPEND(20)NCLAS、ICLS(10、2),NUMS,ISK(256、NASPAR),+IXDIM(NDMPAR),IYDIM(NDMPAR,NANGISKIT(128、3)普通/斜体/ANGIT、GLANGT至100 J=ICS+1、NUMS如果(IABS(ISK(J,1))·EQ·IABS(指数)送到200100继续写入(5,*)′INDSRC-对于查找匹配指数失败返回操作200 ISK(J·1)=IABS(ISK(j、X1))*-1返回操作结束5、12 YPROC·FTN/XPOC·FTN-在骨架点之间的处理在这一点上处理中,输入轮廓线阵(XIN、YIN)包括只对斜体扭变和成比例的Y分类进行调整的数据。但是,并末直接对无骨架点进行修改。所有网格一对准补偿均存储在输出轮廓线阵(XOU、YOU)中,在最后处理时,目前只使用原始轮廓线进行操作。因为要确定每个骨架点的正确位置,所以必须补偿骨架点之间的轮廓线段,而实际建立的网格对准轮廓线要适当地确定比例。根据LPEND(20)对回路的定义来分别处理每个轮廓线回路。
输入ISTS=骨架点阵启动的指示字IENS=骨架点阵结束的指示字子程序YPROC(ISTS、IENS)整数ISBUT(256)普通/参数/XPIX、YPIX、XPESP !黑色的固定结构尺寸参数NDMPAR=32!结构尺寸数参数NASPAR=10!关连点数普通/斜体/NLOOP、LPEND(20),NCLAS,ICLS(10、2),NOMS,ISK(256、NASPAR)+IXDIM(NDMPAR),IYDIM(NDMPAR、NANG、ISKIT(128、3)普通/斜体/ANGIT、OFFIT、HAFPIXISTV=1!第一回路结束位置IENV-LPEND(1)至2000LC-1,NLOOP!每个回路的处理在这个回路上索找全部骨架点。当发现骨架点时,把它们存储在ISBUF阵里,存储在阵里的骨架点回绕字符轮廓线按顺序分类。存储的这些点从输入轮廓线阵(IXIN、YIN)移到输出轮廓线阵(XOU、YOU)。
IK=0!计下这个回路内骨架点数目至500TM-ISTS、IENS!Y-搜索这个回路内的骨架点如果((ISK(JM、3)、NE、2)或(ISK(JM、1)、GT、IENV)或(ISK(JM、1)LT、ISTV))*送到550!Y骨架点的负载缓冲器IK-1+1 !发现1个ISBUF(IK)=ISK(1JM、1)500继续如果(IK、FQ、0)送到1000!这个回路内没有如果(IK、FQ、1)送到3000!误差一不可能只有一个进行560 TM=1,IK!分类缓冲器ISM=0进行555 JN=2,IK如果(ISBUF(JN-1)、LE、ISBUF(JN))送到555ISTMP=ISBUT(JN)!SWAPISBUT(JN)=ISBUF(JN-1)ISBUF(JN-1=ISTMP)ISW=1555继续如果(ISW、EQ、O)送到600560继续进行900JJ=1,IK!输出和输入的结合调用FCHIXY(ISBUT)JJO,XI、YI调用FCHOXY(ISBUF(JJ),XO、YO)
YO=YI+YOISBUT(IK)=ISBUF(1)!闭合骨架回路这个回路在收集所有骨架点之后,在ISBUF阵中有一对点送到YADJ、FTN。每一对点定义被补偿的和确定比例的轮廓线一个线段。
1700进行800JM=2,IK!处理800调用YADJ、(ISBUT(JM-1),ISBUF(JM)、ISTV、IENV)送到1999如果一个回路没有骨架点(很靠不住!),那么它必须从输入阵(XIN、YIN)移到输出阵(XOU、YOU)1000进行1010J=ISTV、IENV!当为“是”时,移动这个回路调用FCHIXY(J、YI、YI)调用STORY(J、YI)1010继续1999 ISTV-IENV+1!下一个回路结束位置IENV-LPEND(LC+1)2000继续返回操作3000写入(5*)′误差-在这个回路中仅有一个停泊ISTV、IENV返回操作结束5、13YADT、FTN/XADJ、FTN-线段的比例这个程序处理的单个线段,该线段由两个新点(IBEG、IEND)定义,线段处在单个字符轮廓线回路上,回路则由该回路起点和终点所定义(ISTAV、IENDV)。这个处理包括(1)线段比例因子的计算,这是根据原线段的两个端点(XIN1、YIN1和XIN1和XIN2,YIN2)和网格对准(XOV1、YOU1)之后的新端点标出的,(2)原线段的起点(XIN1、YIN1)补偿的计算,以便和新线段的起点(XOU1、YOU1)匹配。
子程序YADJ(IBEG、IEND、ISTA、IENDV)调用FCHIXY(IBEG、XIN1、YIN1)调用FCHIXY(IEND、XIN2、YIN2)调用FCHOXY(IBEG、XOU1、YOU1)调用FCHOXY(IEND、XOU1、YOU2)YDIF=YIN2-YIN1如果(YDIF、EQ、O)返回操作!不需要处理YFAK-(YOU2-YOU1)/YDIE!计算这个线段比例因子YSHF=YOU1-YIN1!计算这个线段偏差F(IEND、LE、IBEG)LEND-IEND)!这个线段落在回路的尾点上进行100J=IBEG+1、LEND!处理骨架点之间的线段调用FCHIXY(J、XP、YP)!在YPROC、FI上骨架点被寻址YP=(((YP-YIN1)*YFAK)+YASHF)+YSPF)+YIN1 !比例和偏差调用STORY(J、YP)100继续如果(IEND、GF、IBEG)返回操作因为线段可以跨越闭合回路的两端,这样为处理回路端线段做好了准备,然后从回路起点到线段终点要做另外处理。
进行200J=ISTAV、IEND-1!处理回路终点之外的线段调用FCHIXY(J、XP、YP)YP=(((YP=YIN1)+YFAK)+YSHF)+YIN1调用STORY(J、YP)200继续返回操作结束5、14 ITALIC、FTN-Y-处理后的斜体化本程序的目的是在这个只不过进行Y-处理的点上取消UNITALFTN的影响。由于字符“扭变”,假如根据Y值新部位而重新假设的新位置的X值,可以重新引入一个斜体角。新的效应是当在斜体角上实现了全部Y调整值,因此,不仅产生新的Y-值,而且也产生了新的X值。
应注意两个点。由于有两个轮廓线阵(XIN、YIN和XOU YOU),并且由于Y-调整值被转换到XOU、YO阵,而X-调不是用在UNITAL、FTN中的斜体角(ANGTT),而是字形斜体角(GLANGT)。
子程序体角参数NDMPAR=32!结构尺寸数参数NASPAR=10!关连点数普通/骨架/NLOOP、LPENP(20),NOLAS,ICLS(102),NUMS,ISK(256,NASPAR)+IXDIM(NDMPAR),IYDIM(NDMPR),NANG、ISKIT(128、3)普通/斜体/ANGIT、GLANGT普通/字符输出/NUMO、XOU(256),YOU(256)!黑色输出普通/字符输入/NUMI、XIN(256)、YIN(256)!黑色输入进行100J=1、NUMT!重新斜体化100XIN(J)=XIN(J)-GLANGT*YOU(J)返回操作结束5、15 NCSBLO、FTN-最后处理下面的步骤用于最后处理输入LUN-逻辑单元ICHAR-字符数ILSB-原始的左侧边界IRSB-原始的右侧边界IOFF-保留值IDDD-保留值IUNTT-单元值NRFC-原始字符宽度IMIN-保留值IMAX-保留值HAFPIX-加到全部X-坐标上的X值,以使X-骨架点在网格线之间拟合。
子程序NCSBLO(LUN、ICHAR、ILSB、IRSB、IOFF、IDDD、IUNIT、NREC、IMIN、IMAX、HAFPIX)普通/字符输出/NUMO、XOU(256),YOU(256)!黑色输出普通/参数/XPIX、YPIX、XRFSP、YRESP !黑色象素尺寸参数NDMPAR=32 !结构尺寸数参数NASPAR=10 !关连点数普通/骨架/NLOOP、LPENP(20、NCLAS、ICLS(10、2)
NUMS,ISK(256),NASSPAR),+IXDIM(NDMPAR),IYDIM(NDMPAR),NANG,ISKIT(128、3)普通/骨架/ANGIT、GLANGT因为字符宽度因网格对准而有所改变,所以必须计算新的边界,以便使整个字符宽度(LLSB+WIDTH+RSB)等于字符单元值。为此,定下新的最小值最大X值,从而确定新的字符宽度。那么就可以建立新的边界。
XMINT=-XOU(1)XMAXT-XOU(1)进行2500 J=1 LPEND(LNLOOP)!找到最小值/最大值如果(XOU(J).LT.XMINT)XMINT-XOU(J)如果(XOU(J).GT.XMAXT)XMAXT-XOU(J)2500继续IXMAX=XMAXT !调整右边界和左边界宽度IXMIN=IXMAX-IXMIN+1NDIE-NWIDTH-HRECIXMAX=ILSB+NREC+IRSBILSB=ILSB-NDIF/2 !新的左边边界IRSB=IXMAX-NWIDTH-ILSB !新的右边边界
NREC=NWIDTH !新的宽度最后步骤是对X值进行补偿,补偿量是使网格对准后的骨架点精确地处在网格线之间(HAFPIX)所要求的量。
进行1000 J=1,LPEND(NLOOP)1000 XOU(J)=XOU(J)+HAFPIX返回操作结束5、16取样数据下面是用于处理OGTIMES、T/F2500、字符0003所需要的文件表。
5、170003.LOP-闭合回路8400矢量轮廓线记录1标题字段1-字符数字段2-左边边界字符3-右边边界字段4-基线字段5-保留值字段6-单元值字段7-宽度字段8-Y-最小值字段9-Y-最大值字段10-向量端点=N的数目记录2坐标字段1-点数字段2-X坐标字段3-Y坐标字段4-IPEN(如果IPEN等于0,它表明一个新回路的起点。如果IPEN不等于0,它定义一个其坐标被指定的Y分类。
3 11 8 1536 0 27 557 576 1538 721 1 1511 02 6 1512 13 37 1502 14 54 1493 15 65 1474 16 72 1448 17 75 1419 18 76 1400 19 76 737 210 74 711 211 68 688 212 58 675 213 41 667 214 6 667 215 6 639 216 173 576 217 176 577 2
18 176 988 119 185 981 120 228 937 121 164 911 122 304 896 123 345 892 124 379 896 125 413 911 126 438 932 127 452 950 128 470 987 129 478 1014 130 483 1044 131 485 1076 132 486 1119 133 487 1402 134 488 1432 135 493 1461 136 501 1481 137 512 1498 138 534 1508 139 557 1513 140 557 1537 141 556 1538 142 307 1538 143 307 1512 1
44 340 1507 145 361 1493 146 373 1473 147 380 1442 148 383 1404 149 384 1364 150 384 1162 151 383 1106 152 382 1080 153 378 1045 154 370 1020 155 358 1001 156 336 984 157 307 976 158 303 976 159 273 979 160 237 995 161 214 1015 161 176 1056 163 176 1384 164 178 1424 165 183 1462 166 191 1482 167 206 1498 168 224 1508 169 249 1512 1
70 249 1538 171 1 1538 172 1 1511 15、18 0003.SKL-骨架数据记录1-4每个9个字段-包括X-结构尺寸字段1-记录的结构尺寸数字段2~9-结构尺寸记录5-8相同的Y-结构尺寸记录9闭合回路的定义值字段1-回路数目字段2-回路中最后坐标数字段3-如果存在,则相同记录10Y-分类定义值字段1-Y-分类数字段2-Y分类底部字段3-Y分类顶部字段4,5-如果存在,与2,3相同记录11斜体角字段1-角*100字段2-保留值记录12-N+12骨架点为N的骨架点数据字段1-0003.LOP文件的骨架点指数字段2-关连点数目字段3-X-骨架点或Y-骨架点定义字段4-10-结构尺寸表的关连点/指数8 104 137 101 1228 79 103 57 363 309 330 00 08 45 62 50 668 26 37 87 68 720 00 01 722 1536 908 908 5760 08 3 1 9072 9014 506272 0 1 014 0 1 062 3 1 9069 15032 1769 0 1 017 0 1 032 2 1 5049 903939 0 1 049 1 1 904343 0 1 017 1 1 1501515 1 1 901414 0 2 1423 1 2 57
57 0 2 018 1 2 6262 0 3 040 2 2 9043 903943 0 2 039 0 2 070 2 2 9072 906972 0 2 069 0 2 00 0 0 0利用上述输入数据的FORTAN程序的前一个集将产生一个已填好的比例合适而且已与网格对准的字符。
从上面描述的发明方法的特殊应用中,可以看出,这种方法有多种应用,即产生比例合适的字形或字符数据,利用这些数据可以得到任一分辨力和任一点尺寸上的位-图字型数据。
另外,这种方法能够产生网格对准的轮廓线,并输送到轮廓线驱动装置,如笔式图形显示器和数字控制的机器。
本发明的方法可和数据库一起使用,数据库存有表示限定点的字符轮廓坐标数据。坐标可以用极坐标或笛卡尔坐标表示,并可以存储在非压缩数据库里,或存储在压缩形式的数据库里,压缩形式可以是当前流行的任何一种数据压缩形式。因此,在这里所用的,压缩“坐标典型”的数据包括两种坐标数据库表示方法,并压缩形式或非压缩形式存储。
权利要求
1.由输入数据库产生比例适合的字符数据库的一种方法,这个输入数据库容纳有字符轮廓线上几个点的坐标数据,所述的方法包括如下步骤1)把字符轮廓线分成若干可选择线段,每个线段位于字符轮廓线上的一对点之间,所说的一对字符轮廓线点构成第一骨架点和第二骨架点;2)移动每个线段上的全部坐标,从而使相应的第一骨架点与输出网格对准;3)利用比例因子将每个线段求其线性比例,使相应的第二应架点与输出网格对准。
2.由权利要求
1的方法产生比例合适的字符数据库。
3.权利要求
1的方法还包括如下步骤1)至少选择一个骨架点,对它建立起一个或多个关连骨架点;2)至少对一个选择的关连骨架点建立起另外一个或多个关连骨架点;3)至少移动某些上述关连点和另一些关连骨架点,使之与输出网格对准。
4.由权利要求
3的方法产生比例合适的字符数据库。
5.权利要求
1的方法还包括如下步骤1)至少对一个所选择的骨架点建立一个或多个关连骨架点;2)至少对所选择的一个关连骨架点建立另一个或多个关连骨杂点;3)至少移动某些上述关连点和另外一些关连骨架点,使这些点处于特殊的非对准位置,以与输出网格对准。
6.按权利要求
5的方法产生比例合适的字符数据库。
7.权利要求
1的方法还包括如下步骤1)至少对一个所选的骨架点建立一个或多个关连骨架点;2)至少对一个所选的关连骨架点建立另外一个或多个关连骨架点;3)至少移动某些上述关连点和另外一些关连骨架点至预先确定的位置,这是为了控制与至少对应于一个所选择的骨架点的相对位置。
8.由权利要求
7的方法产生比例合适的字符数据库。
9.在权利要求
7的方法里所说的关连点和另外一些关连骨架点,按上述预定程序内的预定距离移动,这是为了控制规定的字符结构尺寸。
10.在权利要求
7的方法里所说的关连和另外一些关连骨架点移动的预定程序是树形结构。
11.在权利要求
7的方法里,第3步被省略了,当输出网格有足够高的分辨力时,就能精确地显示在设计字符时的任意距离内的变化。
12.权利要求
1还包括如下步骤1)建立(a)至少对两个所选的骨架点有一个或多个关连骨架点,(b)对上述某些所选的关连骨架点有另外一个或多个关连骨架点,从而至少构成两个类似干树形骨架点数据结构;2)至少移动上述某些关连点和另外一些关连骨架点,使这些点处在相对输出网格而言是一些特殊的非对准位置上;3)至少移动一些上述关连点和另外一些关连骨架点,这些点与输出网格对准;4)建立一个附加点、这个点与上述树形数据结构相关连,而当两个树形数据结构在同一个字符点上收敛时,就可避免两个树形数据结构之间的矛盾。
13.从输入数据库得到比例合适的字符数据库的方法,输入数据库内有表示字符轮廓线上几个点的X和Y的坐标数据,上述方法包括下列步骤1)把字符轮廓线分成若干线段,每个线段位于字符轮廓线上一对点之间,上述一对字符轮廓点建立第一骨架点和第二骨架点;2)移动每个线段内的全部坐标,从而使相应第一骨架点与输入网格对准;3)从比例因子确定每个线段的线性比例使相应的第二骨架点与输出网格对准。
14.在权利要求
12的方法里,字符轮廓线线段分配到规定的Y轴区段上,并移动在已知的Y轴区段内的所有线段,按与步骤(2)和(3)同样的方法进行移动和确定比例。
15.由权利要求
13的程序产生比例合适的字符数据库。
16.从输入数据库得到比例合适的字符数据库的一种方法,输入数据库内有表示字符轮廓线上的几个点的坐标数据,上述方法包括如下步骤1)把字符轮廓线分成若干可选择的线段,每个线段处在字符轮廓线上一对点之间,所说的一对字符轮廓线上的点建立了第一骨架点和第二骨架点;2)为了使相应的第一骨架点与网格对准,要移动每个线段上的全部坐标;3)按比例因子取每个线段的线性比例,但不包括字符对角线的线段,使相应的第二骨架点与网格对准;4)按比例因子为1,取字符对角线线段的比例,故相应的第二骨架点和它所对应的第一骨架点之间,仍然保持它原有关系。
17.由权利要求
15的方法产生比例合适的字符数据库。
专利摘要
本发明公开一种能够产生比例合适的轮廓线数据的方法,这种方法可以提供(1)具有不同分辨力和任何点尺寸的位一图字形数据;(2)具有网格对准的轮廓线,以便输送到轮廓线驱动装置内(例如笔式图形显示器和数字控制的机器)。这种方法可将字符的轮廓线“展宽”和“压缩”,使轮廓线上某些特定的点(骨架点)和“位-图网格”适当地对准。这种方法的数学基础是如下三种中的一种(1)将字符的轮廓线截成许多小段(在一对骨架点之间截取);(2)在所截线段上全部填补上座标,使第一骨架点和上述网格对准;(3)按比例因子对所截线段取线性比值,使第二骨架点和网格对准。
文档编号G06K9/48GK85104927SQ85104927
公开日1987年1月7日 申请日期1985年6月28日
发明者托马斯·B·霍金斯 申请人:电脑图像公司导出引文BiBTeX, EndNote, RefMan
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1