高速产生倾斜字和任意角度旋转字的方法

文档序号:2532612阅读:316来源:国知局
专利名称:高速产生倾斜字和任意角度旋转字的方法
技术领域
本发明属于汉字信息处理技术领域。
在欧洲专利EP0095536中我们用轮廓向量形式的压缩信息来表示字形,这样在作倾斜和旋转时,只要计算出向量节点倾斜和旋转后的坐标,便能得到倾斜和旋转后的字形的轮廓折线表示,然后按EP0095536的复原步骤把轮廓向量转换成标记点阵和最终点阵。这一原理不难想到,但在实际上有一系列的问题需要解决。
1.倾斜后的节点坐标的计算公式假定左倾和右倾都以字的左上角为支点,如图2所示。倾斜前的点记为A点(x,y),倾斜后的点记为A′点(x′,y′);倾斜角度为θ,则(x′,y′)与(x,y)有下述关系(1)左倾时x′=x+tanθ·yy′=y(2)右倾时x′=x-tanθ·yy′=y实际应用中,θ>45°就没有什么意义,因字形倾斜程度过大将变得很难看。θ取整数就够了,这样θ值的种类是不多的,仅十几种或几十种,我们可以把各种θ值对应的tanθ事先算好,放在一个E-PROM(或PROM,或ROM)内(称为GC,见图1的〔25〕),然后查表获得,这样可以减少操作,提高速度。
2.旋转后的节点坐标的计算公式假定旋转以字的左上角为支点,顺时针方向旋转,旋转角度为θ,取整数,0≤θ≤360°,如图3所示(注意y轴向下,而不是习惯的向上),则旋转后的一点的坐标(x′,y′)与旋转前的坐标(x,y)有下述关系x′=xcosθ-ysinθy′=xsinθ+ycosθ为了加快速度,可以把360个θ对应的sinθ,cosθ都事先算好,存在GC中,然后查表获得。为了减少GC的容量,实际上只需存0≤θ<90共90个θ值所对应的sinθ值就行了。其他θ对应的sinθ,和所有的cosθ都可以换算得到。例如若90≤θ<180,,则sinθ=sin(180-θ),而180-θ现在在〔0,90)范围内,可以查表得到;例如cosθ=sin(90+θ)。依靠这些替换公式,可以减少所需的GC单元。
GC〔25〕是一只读存储器,接受Am29116来的地址,查表结果输出到Am29116。为了控制GC读出,译码器DSDecoder〔11〕需增加向GC〔25〕发GCOE信号的输出通路。
上述1,2两点的原理很简单。本发明的关键在于如何高速度实现字形的倾斜和旋转,以及如何保证文字质量,这是下面需要详细叙述的。
3.必须先对向量节点进行变大变小的变倍,然后再计算节点倾斜和旋转后的x,y坐标。
EP0095536第11页的下半部叙述了字形变倍方法,区分规则笔划和不规则笔划两种情况,并采取不同的变倍方法以保证质量。宋体横的变倍采用EP0095536第11页第43~46行的(a)是十分重要的,决不能采用(b),在专利85100285中变倍是通过访问PROMAT〔10〕实现的。另外,旋转90°,180°,270°是最常见的,必须保证这几种情况下宋体横、竖变倍后宽度的匀称性。采用先变倍再旋转的做法能确保文字质量。
4.倾斜和旋转后向量的△x,△y值计算倾斜和旋转前,并且尚未变倍(变大或变小)的向量记作EF,其增量记为△x,△y;变倍而且倾斜和旋转后的向量记作E′F′,其增量记为△x′,△y′;E点的坐标记为(xE,yE);F点坐标记为(xF,yF);E′点坐标记为(x′E,y′E);F′点坐标记为x′F,y′F)。这里E点和E′点的坐标均在29116的快速RAM寄存器中存放。△x′,△y′的计算步骤如下(1)xF=xE+△x;yF=yE+△y(2)对xF,yF进行变倍,根据当前字号查变倍表(AT),得到变倍后的值,记作x*F,y*F(3)把x*F,y*F作为x,y代入前面1所述的公式,得到倾斜或旋转后的值x′F,y′F(4)由于E′点的坐标已经保存,因此△x′=x′F-x′E,△′y=y′F-y′E,然后F′点的坐标又作为下一向量的始点在29116RAM中保存。
一个笔划(封闭曲线)的起始点在变倍、倾斜和旋转后的坐标,记作(x′be,y′be),只需作上述(2)(3)步即能得到。
5.坐标原点(即汉字左上角)在标记点阵存储器WS[7]中的x方向和y方向平移值的计算欧洲专利EP0095536提出了标记点阵的形式,以及如何把字形压缩信息复原成标记点阵,再把标记点阵复原成最终点阵的方法。中国专利CN85100285给出了一个具体实现。
需要注意,当没有倾斜和旋转时,汉字左上角永远对应标记点阵WS的0地址;现在情况不同了,根据上述1和2,x′,y′可能变负,而WS地址是不许负值的,x和y也不许负值,否则产生的ws地址不正确。因此新的ws0地址应对准x′min,y′min,这里x′min指的是倾斜和旋转后x坐标的最小值,y′min指的是倾斜和旋转后y坐标的最小值。
如何计算x′min,y′min?一个最简单的办法是在生成每个汉字前,根据当前的字号,算出下面三个点先变倍,再倾斜和旋转以后的坐标值。这三个点是①汉字右上角,即图4的B点;
②汉字右下角,即图4的C点;
③汉字左下角,即图4的D点。
这三点的坐标值是由当前字号唯一确定的,他们对应的变倍、且倾斜和旋转后的坐标值称为x′B,y′B;x′C,y′C;x′D,y′D。
于是x′min=min(0,x′B,x′C,x′D)y′min=min(0,y′B,y′C,y′D)显然,x′min≤0,y′min≤0。我们在生成每个汉字前,把|x′min|,|y′min|算出并存放在Am29116〔1〕或SS〔4〕中的工作单元暂存。以后在计算每个向量节点倾斜和变倍后的坐标时,都要把按前面1,2得到的x′和y′(可能为负),分别加上|x′min|和|y′min|,结果坐标≥0,保证x和y≥0,能够得到正确的WS地址。
实际上,并不需要对每个节点倾斜和旋转后的坐标作上述修正,只需对一个笔划(即封闭曲线)的始点的倾斜和旋转后的坐标作一次修正,x′be+|x′min|,y′be+|y′min|,并送入x,y计数器〔8-1〕,〔8-2〕中就行了。因为以后用到的是向量倾斜和旋转后对应的△x,△y值,记为△x′△y′△x′=|向量终点倾斜和旋转后的x坐标-向量始点倾斜和旋转后的x坐标|△y′=|向量终点倾斜和旋转后的y坐标-向量始点倾斜和旋转后的y坐标|上面减法的两个分量可以是负值,没有必要对这两个分量作|x′min|和|y′min|的修正,因为修正或不修正,得到的△x和△y是完全一样的。
基于上述讨论,我们只对笔划始点作上述修正。
x′min和y′min的计算还可以优化,并不需要每次都算出x′B,x′C,x′D,y′B,y′C,y′D,然后进行比较。
例如当旋转角θ<90°时,x′min=x′D,y′min=0;
例如当旋转角θ在〔270,360)范围内时,x′min=0,y′min=y′B。
6.标记点阵存储器WS〔7〕中x方向和y方向最大点数的计算CN85100285第22页指出,需把x方向最大点数除以4送入x计数器,此数将用于全等比较,产生END电位。
现在x方向和y方向最大点数将作下述修正x方向最大点数=x′max-x′miny方向最大点数=y′max-y′min这里x′max=max(0,x′B,x′C,x′D)y′max=max(0,y′B,y′C,y′D)y方向最大点数将用于控制WS中有多少线的标记点阵需要转换成最终点阵。
7.计算WS0地址对应的SS扫描缓冲区地址软件给出每个汉字左上角在书或报纸版面上的x,y坐标,汉字字形发生器和扫描控制器将根据软件给出的这一坐标,计算出汉字左上角对应的SS扫描缓冲区地址。
当没有倾斜和旋转时,汉字左上角(即WS0地址)对应的SS扫描缓冲区地址=y×扫描一线所占单元数+SS扫描缓冲区始址+(x÷16后取整数)上述公式中,扫描一线所占单元数由版面是4开,8开还是16开所决定,SS扫描缓冲区始址一般是一常数。
当有倾斜和旋转时,软件给出的仍是该汉字倾斜和旋转前左上角在版面上的x,y坐标,但现在WS0地址对应的是(x′min,y′min)点。在把标记点阵转换成最终点阵并送入SS扫描缓冲区时,需要的是(x′min,y′min)点在版面上的x,y坐标,我们称为x′,y′。可以用下述公式计算x′,y′x′=x-|x′min|y′=y-|y′min|现在,(x′min,y′min)点,也即WS0地址,对应的SS扫描缓冲区地址=y′×扫描-线所占单元数+ss扫描缓冲区始址+(x′÷16后取整数)8.对旋转90°,180°,270°这三种情况作判别和加速处理在电子出版系统中,经常要求让一个子版面旋转90°,例如用一张A4纸出两页32开版面,此时要求两页32开版面均旋转90°;有时表格横向很宽,竖向较窄,旋转90°后可以在A4纸上输出。这类旋转要求速度很高,应和不旋转时速度相关不多。本发明采取下述办法(1)在Am29116〔1〕或其他微处理机某个快速RAM单元中辟出两位,表示下列四种情况
①子版面不旋转;
②子版面作90°旋转;
③子版面作180°旋转;
④子版面作270°旋转。
(2)在Am29116〔1〕或其他微处理机RAM单元(最好是快速RAM)中有若干位表示当前汉字是否有倾斜或有非90°,非180°,非270°的旋转。
(3)当单纯地旋转90°,180°,270°时,直接从倾斜和旋转前的向量EF的△x,△y,得到倾斜和旋转后的向量E′F′的△x′,△y′。
用Xs,Ys表示EF所处象限(见CN85100285第12页的定义),用X′s,Y′s表示E′F′所处象限,有下列关系。
①旋转90°时|△x′|=|△y||△y′|=|△x|Xs′,Ys′与Xs,Ys的关系如下XsYsXs′ Ys′0010010010111101②旋转270°时|△x′|=|△y||△y′|=|△x|Xs′,Ys′与Xs,Ys的关系如下
XsYsXs′ Ys′0001011110001110③旋转180°时|△x′|=|△x||△y′|=|△y|x′s=Xsy′s=ys上述运算十分简单,速度很高,无须乘法运算。这里关键是要有(2)所述的判别。还需要强调,本发明说明书3所述的‘先变倍,后旋转’的方法结合这里所述的|△x′|和|△y′|计算方法确保了小字在旋转90°,270°时在笔划宽度方面没有丝毫失真,与不旋转时的质量完全相同,这是很重要的。另外,对90°,180°,270°这三种特殊情况,x′min,y′min,x和y方向最大点数的计算可以大大简化。
9.使旋转和倾斜和处理丝毫不影响“无旋转,无倾斜”这种最常见情况的处理速度的方法在CN85100285图1上增加一个触发器IR0〔14〕和Am29116→IR0的传送,IR0实际上是四位的IR中的一位,IR还有其他用途。IR0的输出接到CCS〔11〕的输入,也即IR0也是CC的来源之一,Am2910可以检测IR0的状态。4位IR实际上在中国专利申请89101483.7“一种适合单路和多路扫描的照排机输出正阳、正阴、反阳、反阴图的控制设备”中已提到过。
在生成一个汉字点阵之前,置好IR0的状态如下
当无倾斜、无旋转,也没有子版面90°,180°,270°的旋转时,IR0=0;其余情况IR0=1。
CN85100285第13页已指出,Am29116,Am2910与外加逻辑电路是平行工作的。
因此,Am2910的下列操作“检查IR0,若IR0=1则转<根据△x,△y计算倾斜和旋转时的△x′,△y′>;若IR0=0则继续”可以很容易地加在某个地方,而不需要任何附加的判别拍节,现在我们把这一Am2910操作加在刚刚得到△x,△y时的那条指令上,本来那条指令上Am2910的操作是“继续下条”,现改成上述操作。
当IR0=0时,继续下条;当IR0=1转向<根据△x,△y计算倾斜和旋转时的△x′,△y′>,该程序入口时首先判是否只有单纯的90°,180°,270°旋转,若是,则作上面6所述的快速处理后即返回;若不是,才按照本发明说明书1,2所述,作比较复杂的计算。这种做法,对于IR0=0这种最最常见的情况,并未增加任何拍节,速度丝毫不受判别和倾斜、旋转处理的影响。
我们在中国专利85103268“高分辨率字形高速旋转的方法”中给出了一种高速旋转90°,180°,270°的方法,该方法所增加的电路比较多,尤其是使门阵列WI比较复杂,另外微程序也比较复杂。与CN85103268相比,本发明不仅提供了任意角度的高速旋转方法,而且对于90°,180°,270°旋转这三种情况,旋转速度并不比CN85103268的方案低,而WI的设备却减少,微程序也比较简单。
CN85103268把0°,90°,180°,270°旋转所需的不同处理放在中国专利CN85100285第7页1所述的复原步骤(c)上,而保持复原步骤(b)相同;而本发明则把各种旋转所需处理统统放在复原步骤(b)上,保持复原步骤(c)相同。为此需要坚持“先变倍,后旋转”的原则,并给出坐标原点在WS中的平移值,WS中x方向和y方向最大点数的计算方法,以及WS0地址对应的ss扫描缓冲区地址的计算方法;为了保证0°,90°,180°,270°这几种特殊情况的高速处理,需增加IR0和相应的处理手段。


本发明的图1与CN85100285图1相比,增加了EPROM GC〔25〕,增加了译码器DS Decoder〔13〕向GC〔25〕输出GCOE的通路。还增加了IR寄存器和Am29116→IR传送通路,以及IR0的输出接到CCS〔11〕的输入的通路。
权利要求
1.以CN85100285“高分辨率汉字字形发生器”为基础,适用于欧洲专利EP0095536所述的轮廓向量形式表示的字形的一种高速产生倾斜和任意角度旋转字的方法,该方法在形成标记点阵,即在执行复原步骤(b)时,具有以下特征a.先变倍(变大或变小)然后作倾斜和旋转得到的向量
的增量Δx′,Δy′是根据下述步骤计算的(1)xF=xE+Δx;yF=yE+Δy这里变倍和倾斜、旋转操作前的向量记为
,其始点坐标记作(xE,yE),终点坐标记作(xF,yF),增量记作Δx,Δy;(2)对(xF,yF)进行变倍(变大或变小),根据当前字号查变倍表得到向量终点变倍后的值,记作x*F,y*F;(3)把x*F,y*F作为x,y值代入①向左倾斜公式
得到的x′,y′即向左倾斜时向量终点倾斜后的坐标,记作x′F,y′F;②向右倾斜公式
得到的x′,y′即向右倾斜时向量终点倾斜后的坐作x′F,y′F;③旋转公式
得到的x′,y′即向量终点旋转后的坐标,记作x′F,y′F(上面的θ是倾斜角或旋转角);本向量变倍、倾斜和旋转后的终点坐标(x′F,y′F),即下一向量的始点坐标(x′F,y′F);而一个笔划(封闭曲线)起始点在变倍、倾斜和旋转后的坐标,记作(x′be,y′be),只需作上述(2),(3)两步即能得到;(4)Δx′=x′F-y′F;Δy′=y′F-y′F;b.对于每个笔划的起始点坐标(指变倍然后倾斜和旋转后的坐标)作如下修正,再送x坐标计数器[8-1]和y坐标计数器[8-2]x′be+|x′min︱→x坐标计数器y′be+|y′min|→y坐标计数器这里x′min=min(0,x′B,x′C,x′D)y′min=min(0,y′B,y′C,y′D)(x′B,y′B)为字形右上角那点,即B点,变倍并倾斜和旋转后的坐标,(x′C,y′C)为字形右下角那点,即C点,变倍并倾斜和旋转后的坐标,(x′D,y′D)为字形左下角那点,即D点,变倍并倾斜和旋转后的坐标;c.标记点阵存储器WS[7]中x方向和y方向最大点数按下述公式计算x方向最大点数=x′max-x′miny方向最大点数=y′max-y′min这里x′max=max(0,x′B,x′C,X′D)y′max=max(0,y′B,y′C,y′D)d.标记点阵存储器ws的0单元对应的ss扫描缓冲区地址按照下述公式计算ws的0单元对应的ss地址=(y-|y|min|)×扫描一线所占单元数+ss扫描缓冲区始址+[(x-|x′min|)÷16后取整数]这里的x,y是由软件给出的汉字左上角那点(原点)在版上的x,y坐标。
2.根据权利要求1所述的方法,一个进一步区分旋转90°,180°,270°这三种特殊情况以提高速度的方法,其特征在于按照下述公式直接从旋转前向量EF△x,△y得到旋转后向量E′F′△x′,△y′a.旋转90°时|△x′|=|△y||△y′|=|△x|xsysx′sy′s0 0 1 00 1 0 01 0 1 11 1 0 1这里xs,ys表示
所处象限,x′s,y′s表示
所处象限(下同);b.旋转270°时|△x′|=|△y||△y′|=|△x|x′s,y′s与xs,ys的关系如下xsysx′sy′s0 0 0 10 1 1 11 0 0 01 1 1 0c.旋转180°时|△x′|=|△x||△y′|=|△y|x′s=Xsy′s=ys
3.根据权利要求2所述的方法,一个依赖于检测IR0触发器〔14〕,进一步提高无倾斜,无旋转时的速度的方法,其特征在于a.当无倾斜、无旋转(包括无90°,180°,270°的旋转)时,置IR0为0;其余情况置IR0为1;b.在微程序中得到向量EF的△x,△y时,Am2910的操作安排为“检查IR0,若IR0=1则转<根据△x,△y计算倾斜和旋转后的△x′,△y′>;若IR0=0则继续”。
4.根据权利要求1所述步骤,一个减少旋转和倾斜时操作的方法,其特征在于有一个只读存储器GC〔25〕,用来存放事先计算好的各种θ值所对应的tanθ和sinθ,并采用查GC表的方法直接得到权利要求1a(3)①,②,③三个公式中所需的tanθ和sinθ。
全文摘要
高速产生倾斜字和任意角度旋转字的方法属于汉字信息处理技术领域,在专利CN85100285设备的基础上,用来对欧洲专利EP0095536所表示的字形作高速旋转和倾斜。这一方法对于90°,180°,270°旋转,速度特别快。为了旋转和倾斜所增加的处理,丝毫不影响不旋转时的处理速度。
文档编号G09G1/02GK1037413SQ89103388
公开日1989年11月22日 申请日期1989年5月26日 优先权日1989年5月26日
发明者王选, 吕之敏 申请人:北京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1