專利名稱:位映像字符轉(zhuǎn)換器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及從各種字符和其它符號(hào)的位映象外形的曲線表示中產(chǎn)生分辨率和點(diǎn)尺寸可選擇的表示的技術(shù)。本發(fā)明尤其涉及把字符或符號(hào)的外形表示轉(zhuǎn)換成位映象表示的填充裝置和方法。
以前在計(jì)算機(jī)顯示或桌面出版應(yīng)用方面基本上有三種方法和裝置來表示字形。這些方法是1)位映象表示法;2)矢量表示法;和3)曲線表示法。
在位映象表示法中把字形定義成點(diǎn)陣,如15×16點(diǎn)陣。請(qǐng)參見
圖1的這種漢字字符的例子。如果需要顯示或打印如24×24不同大小的字形,則要求有與該字形大小對(duì)應(yīng)的點(diǎn)陣。如果在應(yīng)用漢語或其它東方國(guó)家文字的計(jì)算和印刷系統(tǒng)中使用位映象字形,則需要較大的存儲(chǔ)空間來保存描述不同大小的各種字體的字形的點(diǎn)陣。
在矢量表示法中用多邊形近似法來表示字形外形。存儲(chǔ)表示多邊形頂點(diǎn)的數(shù)據(jù)點(diǎn)。然而,這種方案不是高效的方法。為了高精度地逼近曲線部分,需要許多小的矢量。而且,當(dāng)這些字符按比例放大到非常大的尺寸時(shí)輸出的圖象不是很好。最終結(jié)果是線的交會(huì)點(diǎn)不光滑。
以曲線形式表示的字形外形用一組光滑連接的三次曲線來描述。如果用這種方法來定義字符,則從同一個(gè)曲線描述中可以產(chǎn)生不同大小和形狀的字符。所要做的所有工作是規(guī)定X和Y方向上的換算系統(tǒng)。
對(duì)字符作放大縮小的過程是完成曲線表示的坐標(biāo)位映象,并用區(qū)域填充方法重構(gòu)位映象?;谶@一優(yōu)點(diǎn),已經(jīng)把這種輪廓化的字形應(yīng)用于桌面計(jì)算機(jī)和打印系統(tǒng)。
如果用輪廓化的字形來格式文本,則必須提供有效和全面的方法來把用其外形描述的字形轉(zhuǎn)換成位映象形式,并在幀緩沖器適當(dāng)?shù)奈恢蒙蠈?duì)它進(jìn)行填充,用于以后的顯示或打印。
所謂“全面”其含義是該方法應(yīng)當(dāng)對(duì)各種尺寸的字形進(jìn)行光柵化而形變最小。在輪廓化的字形中,用一種描述來產(chǎn)生不同大小的字形。在這種情況下,如果該方法需要產(chǎn)生小號(hào)的字形,則會(huì)出現(xiàn)問題。這些問題包括斷筆、過填充和變形。例如,當(dāng)把字形縮成較小號(hào)時(shí),許多筆劃將變成只有一個(gè)像素的寬度。如果沒有較好地設(shè)計(jì)填充方法,則可能會(huì)產(chǎn)生過填充或未充滿這些筆劃。未充滿會(huì)產(chǎn)生斷筆劃。過填充會(huì)填充幀緩沖器中額外的空余空間。形變可能是由于量化等引起的一筆劃中不均勻的筆劃寬度、筆劃合并以及各種形變產(chǎn)生的。
在文獻(xiàn)中有許多種填充方法。它們可以劃分成兩種主要的類別1)種子(seed)填充;和2)邊緣填充。
在種子填充方法中,首先把待填充的形狀的連接輪廓線畫在作畫緩沖器上。然而,在字符形狀內(nèi)部選出一種子點(diǎn)。然后該方法填充該像素以及從該種子像素可獲得所有像素。填充將連續(xù)進(jìn)行,一直到達(dá)輪廓線點(diǎn)上。
種子填充的優(yōu)點(diǎn)是在填充過程期間,不會(huì)處理輪廓外的像素。然而,種子填充在把外形或字符轉(zhuǎn)換成位映象字符時(shí)出現(xiàn)許多問題。種子填充的一個(gè)缺點(diǎn)是需要為各條輪廓線提供或找出一個(gè)起始的種子點(diǎn)。該種子點(diǎn)可以在與輸入所有輪廓數(shù)據(jù)的某一步過程中提供。然而,當(dāng)字形尺寸變得較小時(shí),一個(gè)輪廓線可能分解成兩個(gè)或更多個(gè)獨(dú)立的輪廓。這樣提供的種子點(diǎn)將落在這些輪廓線的其中一個(gè)內(nèi),而且將僅填充該輪廓線,以致產(chǎn)生了未充滿現(xiàn)象。如果需要在填充進(jìn)行之前用該方法本身來找出所有種子點(diǎn),則該方法將變得十分復(fù)雜。
邊緣填充還可以稱作掃描轉(zhuǎn)換填充。邊緣填充方法的第一步也是把字形的輪廓畫到作畫緩沖器上。下一步是一行一行地掃描整個(gè)作畫緩沖器,填充輪廓線內(nèi)部。在各個(gè)水平掃描線內(nèi),該方法填充第一和第二輪廓線像素之間的區(qū)段,第三和第四輪廓線像素之間的區(qū)段以及后面各組輪廓線像素之間的區(qū)段。其依據(jù)是一條直線與一閉合的輪廓線相交偶數(shù)次。如果該線的第一點(diǎn)位于該輪廓線外,那么該線可以橫截該輪廓線,并通過計(jì)算相交次數(shù)來決定哪段位于輪廓線內(nèi)。
所有的邊緣填充方法不得不解決諸如角上的點(diǎn)以及重疊的輪廓線等一些特殊情況,以使本方法在所有時(shí)間都能正確地工作。通常,該方法必須掃描整個(gè)作畫緩沖器以對(duì)它進(jìn)行正確填充。而且,該方法還需要進(jìn)行額外的過程以避免過填充和未填滿現(xiàn)象。有時(shí)需要用另一個(gè)存儲(chǔ)緩沖器來存儲(chǔ)輪廓線。這使得該方法效率低下。
本發(fā)明的目的在于提供一種全面高效的填充裝置和方法,通過它們外形的描述來產(chǎn)生位映象字符。它只需較小的存儲(chǔ)器,且處理速度快,避免了過填充和未填滿現(xiàn)象。
與其它的專利相比,本發(fā)明具有下列重要的特征和目的。
本發(fā)明首先把曲線描述的輪廓線轉(zhuǎn)換成位映象描述,然后填充該輪廓線內(nèi)部,得到位映象字形。
在輪廓線轉(zhuǎn)換過程中,在鏈?zhǔn)酱a描述中設(shè)置一些鏈?zhǔn)酱a標(biāo)志,來指示輪廓線沖突之處。
在填充過程中,用鏈?zhǔn)酱a描述來幫助掃描并僅填充輪廓線內(nèi)部以改善速度。鏈?zhǔn)酱a標(biāo)志有助于避免過填充問題。
根據(jù)字形輪廓線的描述來建立填充說明。這避免了種子填充方法中字形尺寸較小時(shí)產(chǎn)生的未填滿問題。
在本發(fā)明中使用了兩個(gè)存儲(chǔ)緩沖器。一個(gè)用于字形圖象。該緩沖器的大小與最大字符相等,一位用于一個(gè)像素。另一個(gè)用于存儲(chǔ)鏈?zhǔn)酱a和鏈?zhǔn)酱a標(biāo)志。
省略功能用于避免數(shù)字或參量描述和外形像素描述之間的差異產(chǎn)生的過填充問題。
如果把它與下列一些相關(guān)專利比較,則與已有技術(shù)的這些差異十分明顯。
美國(guó)專利No.4,551,092主要涉及在把字符從外形形式轉(zhuǎn)換到位映象形式期間,尤其是在字符尺寸較小時(shí)控制字符筆劃的寬度。這被稱為示意(hinting),而不是填充。該專利研究的主題不同于本發(fā)明的目的和實(shí)質(zhì)。
美國(guó)專利No.4,785,391和No.4,959,801都涉及同一方法。其中一個(gè)是另一個(gè)的改進(jìn)。在這些專利中主要講授的是表示字形的新方法,以改善字符的產(chǎn)生質(zhì)量,尤其是對(duì)小號(hào)的字符。
美國(guó)專利No.5,5 38,385論及輪廓線填充。它首先掃描輪廓線,在作畫緩沖器上建立一些記號(hào)。例如,建立第一和第二類圖象元素。然后如該方法所定義的獲得方向碼序列。然而,通過光柵掃描,在作畫緩沖器內(nèi)的記號(hào)和方向碼的幫助下填充內(nèi)部。該專利與本發(fā)明的不同之處是1)該專利在作畫緩沖器上產(chǎn)生記號(hào)來幫助填充。另一方面,本發(fā)明在作畫緩沖器上畫出外形,并在輪廓線的鏈?zhǔn)酱a描述上設(shè)置一些標(biāo)志,來幫助填充。
2)本發(fā)明產(chǎn)生鏈?zhǔn)酱a輪廓線,有助于僅掃描待填充的輪廓線內(nèi)部和輪廓線本身。相反,該專利需要掃描整個(gè)作畫緩沖器來填充字符。
3)本發(fā)明用作畫緩沖器中的一位來表示位映象形式的一個(gè)像素。然而,該專利至少用作畫緩沖器中的兩位來表示位映象形的一個(gè)像素,以獲得空間來存儲(chǔ)記號(hào)。
美國(guó)專利No.4,967,376涉及字形輪廓填充。它首先掃描輪廓線,在作畫緩沖器上建立一些記號(hào),這些記號(hào)可以是左邊緣標(biāo)記或右邊緣標(biāo)記。然后掃描整個(gè)作畫緩沖器開始填充。該專利與本發(fā)明的幾個(gè)差別如下所列1)該專利在作畫緩沖器內(nèi)產(chǎn)生記號(hào)來幫助填充。而本發(fā)明在作畫緩沖器上畫出外形,并在輪廓線鏈?zhǔn)酱a描述中設(shè)置一些標(biāo)志來幫助填充。
2)本發(fā)明產(chǎn)生輪廓線鏈?zhǔn)酱a,它有助于僅掃描輪廓線內(nèi)部和輪廓線本身來填充。而該專利需要掃描整個(gè)作畫緩沖器來進(jìn)行填充。
3)本發(fā)明用作畫緩沖器中的一位來表示位映象形式的一個(gè)像素。另一方面,該專利用相同大小的二個(gè)存儲(chǔ)面。一個(gè)是作畫面,另一個(gè)是控制面。
4)另外,本發(fā)明有特殊的省略功能,而該專利沒有。
本發(fā)明用鏈?zhǔn)酱a標(biāo)志實(shí)現(xiàn)了上述目的。尤其是,用鏈?zhǔn)酱a標(biāo)志來指示輪廓線的沖突,有助于避免斷筆劃和過填充問題。使用兩個(gè)存儲(chǔ)緩沖器,一個(gè)是作畫緩沖器,而另一個(gè)用于表示輪廓線的鏈?zhǔn)酱a。
電子出版系統(tǒng)、文字處理系統(tǒng)及其它領(lǐng)域使用外形描述來存儲(chǔ)字符和符號(hào)。為了產(chǎn)生給定大小的位映象字符,必須按比例縮小外形描述,在圖像緩沖器內(nèi)畫出外形描述,然后填充。本發(fā)明把這些事情結(jié)合在一起。在本發(fā)明中有三個(gè)步驟。
在第一步,在作畫緩沖器內(nèi)畫出字符或符號(hào)的外形,產(chǎn)生鏈?zhǔn)酱a表示,并在鏈?zhǔn)酱a表示中設(shè)置指示輪廓線沖突的標(biāo)志。
在第二步,再次掃描輪廓線,把漏掉的標(biāo)志加到鏈?zhǔn)酱a表示中。
在第三步,填充作畫緩沖器中的輪廓線的內(nèi)部。在填充期間,一行接一行地掃描和填充作畫緩沖器。但不掃描輪廓線外。它實(shí)現(xiàn)了不需要種子點(diǎn)來幫助填充。而且,在第三步中,用了專門的技術(shù)來調(diào)節(jié)舍入誤差,使得字符筆劃更細(xì),更接近原來的字符。這用于避免前面的填充方法面臨的一個(gè)像素過填充問題。
本方法和裝置結(jié)合了邊緣填充和種子填充的優(yōu)點(diǎn),同時(shí)避免了它們的缺點(diǎn),使它成為一種非常有效和全面的處理系統(tǒng)和裝置。
通過結(jié)合下面附圖閱讀本發(fā)明的詳細(xì)描述將能更容易地理解和了解本發(fā)明的特征和優(yōu)點(diǎn)。
圖1是15×16位映象字符圖像的示意圖。
圖2是三次Bezier曲線的曲線段示意圖。
圖3是Bezier曲線的分解圖,把一段Bezier曲線在中點(diǎn)位置分成兩段,形成新的曲線段,每段都是Bezier曲線。
圖4是漢字“顫”的示意圖,圖8個(gè)部分,11條輪廓線構(gòu)成。
圖5是有0—7,8個(gè)值表示8個(gè)方向的鏈?zhǔn)酱a表示的示意圖。
圖6是傳統(tǒng)的已填充了12個(gè)像素的填充方法下的過填充矩形。
圖7是改進(jìn)的矩形像素表示,它已填充了6個(gè)像素,比圖6的矩形更精確。
圖8至圖13示出了本發(fā)明在填充英文字符“F”時(shí)的填充過程。
圖14和圖15示出了通過關(guān)于字母“F”的填充過程的三個(gè)步驟產(chǎn)生鏈?zhǔn)酱a和標(biāo)志。
圖16至圖21示出了本發(fā)明在填充數(shù)字“5”時(shí)的填充過程。
圖22和圖23示出了通過關(guān)于數(shù)字“5”的填充過程的三個(gè)步驟產(chǎn)生鏈?zhǔn)酱a和標(biāo)志。
本發(fā)明用三次Bezier曲線來描述字形。參量三次由線段是一種曲線點(diǎn)用一些參數(shù)t的三次式項(xiàng)式來表示的曲線。因?yàn)槭怯邢薜那€段,所以我們可以限制參數(shù)t的范圍,0≤t≤1,而不失一般性。對(duì)于三次Bezier曲線段,如圖2所示,用了四點(diǎn),以矢量形式表示的曲線方程式如下P(t)=Σi=03Piti(l-t)3-i---0≤t≤1]]>Bezire曲線有許多重要的特性。它們中的一些對(duì)實(shí)現(xiàn)本發(fā)明是有用的,它們是
1.P0和P3是曲線段的兩個(gè)端點(diǎn)。
2.可以用Bezier曲線來表示直線段。如果連接P0和P3兩點(diǎn)來形成直線,則直線P0P3上的任意兩點(diǎn)可用作兩個(gè)剩余控制點(diǎn)P1和P2。
3.兩內(nèi)控制點(diǎn)P1和P2位于兩相應(yīng)端點(diǎn)的曲線段的切線矢量上。即P1=P0+△P0*K0P2=P3+△P3*K3其中K0和K3為標(biāo)量。
4.如果在中間點(diǎn)t=0.5處把Bezier曲線分成兩段,它們中的每段仍是Bezier曲線,新的控制點(diǎn)可以如圖3所示由下面的公式計(jì)算Q0=P0Q1=P0+P12]]>Q2=P0+2P1+P24]]>Q3=P0+3P1+3P2+P38]]>R0=Q3R1=P1+2P2+P34]]>R2=P2+P32]]>R3=P3上面首先告訴了我們?nèi)绻粭l曲線是由幾條曲線段連接而成的,并且該曲線是閉合的,則每條曲線段可以用三個(gè)數(shù)據(jù)點(diǎn)來表示。這是因?yàn)橐粭l曲線段的端點(diǎn)是下一條曲線段的起始點(diǎn)。
其次可以把上面用于檢查曲線的一部分是否是直線。如果兩個(gè)控制點(diǎn)位于或者非常接近線段P0P3,則可以認(rèn)為該曲線是直線,可由兩點(diǎn)而不是四點(diǎn)來表示。最后,它還告訴我們?cè)诠鈻叛b置上畫Bezier曲線的方法。
與英文字符不同,大多數(shù)漢字或東方字符由幾個(gè)不相連的部分構(gòu)成。每個(gè)部分的外形可以包含一條或一條以上條閉合輪廓線。例如,如圖4的字符“顫”,由8個(gè)不相連的部分構(gòu)成。在8個(gè)部分之中,5個(gè)部分(即1,2,5,7,8)由單條閉合的曲線表示,其余3個(gè)(即部分3,4,6)由兩條閉合曲線表示。每條閉合曲線由幾條Bezier曲線段描述。
對(duì)于漢字或其它東方字符,本發(fā)明將一個(gè)部分一個(gè)部分地對(duì)字形柵格化。即本發(fā)明的裝置和方法讀取一個(gè)部分的完整的曲線描述,并在讀取和柵格化下一部分之前對(duì)它柵格化。在字形內(nèi)對(duì)部分進(jìn)行柵格化是根據(jù)從上至下和從左到右的順序進(jìn)行的。在字符“顫”的例子中(圖47),柵格化過程將按部分1至8的順序。
對(duì)于每條輪廓線,在該方法中,描述Bezier曲線段的數(shù)據(jù)點(diǎn)并不位于不變的方向上。該方向可以任意決定,但必須是一致的。例如,如果根據(jù)該方向(即順時(shí)針)從左側(cè)看閉合曲線的內(nèi)側(cè),則其外側(cè)在右邊(即逆時(shí)針)。該固定方向的規(guī)則對(duì)于本發(fā)明的填充方法來說非常重要。
作為討論,下面將描述本發(fā)明對(duì)一個(gè)部分進(jìn)行柵格化的過程。假設(shè)作畫緩沖器(幀緩沖存儲(chǔ)器)可用于存儲(chǔ)經(jīng)柵格化的位映象字形圖形。還假設(shè)內(nèi)輪廓線的方向?yàn)槟鏁r(shí)針,外輪廓線的方向?yàn)轫槙r(shí)針。因此,當(dāng)找出該輪廓線時(shí),填充方向(應(yīng)當(dāng)填充的輪廓線的內(nèi)部部件)在右邊。
填充過程由三個(gè)步驟組成,首先在作畫緩沖器上產(chǎn)生字形外形,并產(chǎn)生外形的鏈?zhǔn)酱a描述和鏈?zhǔn)酱a標(biāo)志;其次加入遺漏的鏈?zhǔn)酱a標(biāo)志,第三,填充輪廓線內(nèi)部。
所述的第一步是在作畫緩沖器上畫出字形外形,同時(shí)產(chǎn)生外形的鏈?zhǔn)酱a描述和鏈?zhǔn)酱a標(biāo)志。
鏈?zhǔn)酱a是用來表示數(shù)字曲線的編碼方法。在該方法中,對(duì)連續(xù)的曲線像素之間的方向矢量進(jìn)行編碼。鏈?zhǔn)酱a通常用8個(gè)方向(見圖5),可以用3比特碼字來編碼。
一般,鏈?zhǔn)酱a包含起始像素地址后跟一串碼字。在本發(fā)明中,用四位來表示一個(gè)節(jié)點(diǎn),用三位來表示方向,用一位表示一個(gè)標(biāo)志。鏈?zhǔn)酱a是輪廓線沖突點(diǎn)的指示,在填充過程中用來避免未填充和過填充。當(dāng)輪廓線充分縮小以至輪廓線上的不同部分由于數(shù)據(jù)量化原因而映象到同一組像素上時(shí)就會(huì)產(chǎn)生輪廓線沖突。
在該步驟中,該方法用Bezier曲線分解特性在作畫緩沖器上畫出Bezier曲線;并對(duì)沖突的外形像素設(shè)置鏈?zhǔn)酱a標(biāo)志。
該過程中的這一步驟可以用下列的方法步驟來確定01 清除堆棧,初始化變量02 對(duì)每條閉合的輪廓線進(jìn)行一次03 開始04 如果該段縮小到單個(gè)像素05開始06產(chǎn)生該像素的鏈?zhǔn)酱a;07 如果作畫緩沖器上相關(guān)的像素為008開始09把該鏈?zhǔn)酱a的標(biāo)志設(shè)置為0;10在作畫緩沖器上畫出該像素;11結(jié)束12 否則把該鏈?zhǔn)酱a的標(biāo)志設(shè)置為1;13 如果堆棧為空14停止;
15 否則彈出進(jìn)堆棧的段16 結(jié)束17 否則18 開始19 把一段分成二段;20 把第二段推入堆棧;21 結(jié)束22 結(jié)束為了保持鏈?zhǔn)酱a值,需要一個(gè)輔助緩沖器。由于本方法一個(gè)部分一個(gè)部分地柵格化字形,所以緩沖器的大小由描述字形中所有部分中的一個(gè)部分的輪廓線最長(zhǎng)總長(zhǎng)度(像素總數(shù))來決定。假定一個(gè)漢字有N個(gè)部分,li表示第i個(gè)部分的輪廓線像素的總數(shù);s是所需的緩沖器大小,則我們有s=f(max(li;i=1,…N))在實(shí)現(xiàn)本發(fā)明的方法前,應(yīng)當(dāng)清除作畫緩沖器。對(duì)于每個(gè)新產(chǎn)生的外形像素,將建立一相應(yīng)的鏈?zhǔn)酱a。至于是否把該鏈?zhǔn)酱a的標(biāo)志設(shè)置成1,則由作畫緩沖器內(nèi)的其相關(guān)的像素值決定。如果該像素值已經(jīng)畫在作畫緩沖器上,則把標(biāo)志設(shè)置為1,表示有沖突。相反,把標(biāo)志設(shè)置為0,并在作畫緩沖器內(nèi)畫出相關(guān)的像素。
該步驟完成時(shí),在作畫緩沖器上畫出了該字形部分的外形,也產(chǎn)生了鏈?zhǔn)酱a及其標(biāo)志。
以下面的方法進(jìn)行本過程的第二步。如我們?cè)谇懊娴谝徊剿f的,輪廓線沖突是輪廓線的不同部分由于量化誤差而映象到同一組像素上的結(jié)果。這些像素中的每個(gè)都有兩組相關(guān)的鏈?zhǔn)酱a。在第一步期間,僅設(shè)置了第二個(gè)鏈?zhǔn)酱a標(biāo)志,需要另外有一步驟來向回檢查,設(shè)置遺漏的鏈?zhǔn)酱a標(biāo)志。這是為了保證正確填充。該第二步的步驟如下
01 對(duì)每條閉合輪廓線進(jìn)行一次02 開始03得到端點(diǎn)坐標(biāo);04做05 開始06從鏈?zhǔn)酱a計(jì)算當(dāng)前像素的坐標(biāo);07如果該鏈?zhǔn)酱a的標(biāo)志為108 清除作畫緩沖器上的外形像素(X,Y);09否則10如果外形像素(X,Y)為011 開始12 把相關(guān)鏈?zhǔn)酱a的標(biāo)志設(shè)置為113 在作畫緩沖器上設(shè)置外形像素(X,Y)14 結(jié)束15否則16如果外形沿著垂直方向向上,并且17 作畫緩沖器內(nèi)相鄰的像素(X+1,Y)為1;18 把該相關(guān)的鏈?zhǔn)酱a的標(biāo)志設(shè)置為1;19結(jié)束20 一直到當(dāng)前像素到達(dá)循環(huán)中最后一個(gè)像素;21 結(jié)束由于所有的輪廓線均閉合,起始像素的坐標(biāo)與結(jié)束像素的坐標(biāo)相同。對(duì)于每條輪廓線,選擇一個(gè)像素作為起始點(diǎn),向后分析鏈?zhǔn)酱a檢查遺漏的鏈?zhǔn)酱a標(biāo)志。如果已經(jīng)設(shè)置了各鏈?zhǔn)酱a標(biāo)志,則它表示一個(gè)輪廓線沖突。
有一條額外的鏈?zhǔn)酱a,它也映象到已與其沖突的相關(guān)的像素上。然后本發(fā)明確定該鏈?zhǔn)酱a,并把它的鏈?zhǔn)酱a標(biāo)志設(shè)置為1。為了完成這一工作,本方法在作畫緩沖器中把已經(jīng)沖突的像素復(fù)位到0,并繼續(xù)分析工作。以后,只要發(fā)現(xiàn)作畫緩沖器的外形像素被清除,則設(shè)置相應(yīng)的鏈?zhǔn)酱a標(biāo)志。
在第二步中,如果對(duì)應(yīng)的輪廓線處于垂直方向上并且其內(nèi)部區(qū)域?qū)拑H為兩個(gè)像素,則設(shè)置額外的鏈?zhǔn)酱a標(biāo)志。該額外的標(biāo)志在描述避免過填充的下一步驟第3步中使用。
此時(shí),如果存在沖突像素,只檢測(cè)出輪廓線內(nèi)所有的沖突像素,并用鏈?zhǔn)酱a標(biāo)志作標(biāo)記。還設(shè)置額外標(biāo)志,以避免過填充。因此,現(xiàn)在可以開始填充。
對(duì)每條輪廓線,本方法和裝置將分析其鏈?zhǔn)酱a并檢測(cè)其相應(yīng)的標(biāo)志。如果沒有設(shè)置標(biāo)志,本方法將在作畫緩沖器內(nèi)尋找對(duì)應(yīng)的輪廓線像素的位置,并沿水平方向?qū)ζ鋬?nèi)部進(jìn)行填充。該填充可以從左到右,也可以從右到左,這可以由上述的恒方向轉(zhuǎn)換來判斷。填充將沿著預(yù)定的方向繼續(xù)進(jìn)行,一直到碰到一個(gè)已經(jīng)填充的像素為止。
在填充期間,本方法和裝置必須解決過填充問題。本發(fā)明的方法首先用數(shù)學(xué)或參量輪廓線描述來進(jìn)行外形作畫。根據(jù)本方法,輪廓線的寬度為零,而在外形作畫時(shí),外形有固定的寬度,1個(gè)像素。例如,假設(shè)有一坐標(biāo)為(0,0),(3,2)的矩形。該矩形的外形表示由四個(gè)矢量(0,0),(3,0);(3,0),(3,2);(3,2),(0,2)和(0,2),(0,0)組成。如果該外形是在作畫緩沖器內(nèi)填充,其結(jié)果是一個(gè)12個(gè)平方單位的矩形(見圖6)。然而,在參量條件下,該矩形僅有6個(gè)平方單位(見圖7)。這就是造成過填充問題的原因。下面過程中的步驟用于省略這些過填充像素。
本過程的外形填充方法的步驟如下01 對(duì)每個(gè)閉合曲線進(jìn)行一次02 開始03得到起始點(diǎn)的坐標(biāo)
04做05 開始06 根據(jù)鏈?zhǔn)酱a在作畫緩沖器中對(duì)當(dāng)前輪廓線像素定位07 決定水平填充方向;08 如果該鏈?zhǔn)酱a的標(biāo)志為零09從該輪廓線像素開始填充作畫緩沖器10沿水平填充方向填充,一直到遇到一已填充的像素;11如果(輪廓線處于垂直向下或處于水平向左的方向上);12并且其相應(yīng)的鏈?zhǔn)酱a標(biāo)志為零;13把該輪廓線復(fù)位到零;14 結(jié)束15 一直到達(dá)結(jié)束點(diǎn)16 結(jié)束下面提供二個(gè)例子來說明本發(fā)明的填充方法。圖8至圖13示出了英文字符“F”的填充過程,圖16至21示出了數(shù)字“5”的填充過程。在圖14,15,22和23中還示出了填充算法的最初兩步產(chǎn)生的鏈?zhǔn)酱a和標(biāo)志。
圖8至圖13中的字符“F”被縮小20×20位的映象圖上。其外形用了1000×1000歸一化坐標(biāo)系統(tǒng),它僅包含一條輪廓線。當(dāng)把它縮小20×20位的映像圖上時(shí),則坐標(biāo)系統(tǒng)的原點(diǎn)在左下角(即0,0)上。下面的解釋基于圖8至圖13所描述的字符“F”和圖14和15的相關(guān)的標(biāo)志碼進(jìn)行的。
在這些鏈?zhǔn)酱a標(biāo)志表中,數(shù)字“0”—“7”表示沒有相應(yīng)標(biāo)志組的鏈?zhǔn)酱a,數(shù)字“8”—“F”表示有相應(yīng)標(biāo)志組的鏈?zhǔn)酱a“0”—“7”。
在本裝置進(jìn)行的填充過程的第一步中,以順時(shí)鐘方向?qū)ψ址癋”的外形進(jìn)行柵格化。如圖8所示,把字符的外形畫在作畫緩沖器上。同時(shí),產(chǎn)生帶有一些如圖14所示的鏈?zhǔn)酱a標(biāo)志的鏈?zhǔn)酱a描述。在像素(6,29)開始輪廓化處理,沿水平方向向右進(jìn)行15個(gè)像素一直到像素(21,29)。
在鏈?zhǔn)酱a描述的開始處有15個(gè)“0”,表示水平移動(dòng)了15個(gè)像素。此后,輪廓從像素(21,29)到像素(21,25)向下4個(gè)像素。再看圖14,在鏈?zhǔn)酱a描述中有4個(gè)“6”,表示垂直移動(dòng)了4個(gè)像素。
鏈?zhǔn)酱a描述中下一個(gè)數(shù)字“4”指示輪廓線從像素(21,25)到像素(20,25)水平移動(dòng)。鏈?zhǔn)酱a描述的數(shù)字“0”,“4”,“6”是其標(biāo)志沒有設(shè)置的鏈碼。這分別意味著直線向右,然后直線向下,再直線向左。
在圖5中可以發(fā)現(xiàn)鏈?zhǔn)酱a的含義。在圖14中有一些鏈?zhǔn)酱a,其中已設(shè)置了標(biāo)志,如最后兩個(gè)鏈?zhǔn)酱a“C”。它們意味著除了標(biāo)志已設(shè)置之外其余與鏈?zhǔn)酱a“4”相同。第一個(gè)“C”表示輪廓從像素(8,29)到像素(7,29)向左移動(dòng)一個(gè)像素,輪廓線像素在像素(7,29)沖突。第二個(gè)“C”表示輪廓從像素(7,29)到像素(6,29)向左移動(dòng)一個(gè)像素,輪廓線像素在像素(6,29)沖突。在該步驟中最初兩個(gè)像素(6,29)和(7,29)的鏈?zhǔn)酱a描述還應(yīng)有設(shè)置標(biāo)志,指示兩個(gè)像素沖突。然而,因?yàn)樵诋a(chǎn)生最初兩個(gè)“0”時(shí),該方法的步驟過程并不知道有兩個(gè)像素沖突,所以在該步驟中避免了這種情況。下面的步驟返回加入這些遺漏的標(biāo)志。
在本裝置填充過程的第二步期間,如圖15所示設(shè)置遺漏的鏈?zhǔn)酱a標(biāo)志。從起始像素(6,29)開始沿著在第一步產(chǎn)生的鏈?zhǔn)酱a以逆時(shí)針方向跟蹤該輪廓線。在該過程中,檢查鏈?zhǔn)酱a標(biāo)志和圖像緩沖器內(nèi)的輪廓線像素。在從像素(6,29)至(7,29)跟蹤輪廓線時(shí),因?yàn)橐褳橄嚓P(guān)的鏈?zhǔn)酱a設(shè)置了標(biāo)志,所以清除了圖像面內(nèi)的像素(6,29)。同樣原因,也清除了圖像面內(nèi)的像素(7,29)。
當(dāng)再從水平方向跟蹤輪廓線到像素(7,29)時(shí),發(fā)現(xiàn)像素點(diǎn)已經(jīng)清除。此時(shí),為相關(guān)的鏈?zhǔn)酱a設(shè)置標(biāo)志。該鏈?zhǔn)酱a為鏈?zhǔn)酱a表中開始處的第二個(gè)“8”,在圖14中,其值為“0”,意味著沒有設(shè)置標(biāo)志。同時(shí),再次在圖像面內(nèi)設(shè)置像素(7,29)。用同樣的方法,還為像素(6,29)的鏈?zhǔn)酱a表內(nèi)的第一個(gè)鏈?zhǔn)酱a設(shè)置標(biāo)志。另外,再次在圖像面內(nèi)設(shè)置像素(6,29)。在第二步中,正確設(shè)置了填充過程中所需要的所有鏈?zhǔn)酱a標(biāo)志。
在該過程的第三步中,填充從像素(6,29)以順時(shí)針方向沿輪廓線開始。圖9至12示出了到像素(18,28),(12,22),(19,19)和(12,13)的填充過程的中間結(jié)果。
在填充過程期間,順時(shí)針掃描輪廓。在每一個(gè)輪廓像素點(diǎn)上,檢查相關(guān)的鏈?zhǔn)酱a標(biāo)志。如果設(shè)置了標(biāo)志,那么,不進(jìn)行填充。否則,填充該像素與另一個(gè)已經(jīng)畫在圖像面上的輪廓像素之間的內(nèi)部部分。
輪廓線像素的填充方向結(jié)合兩個(gè)到達(dá)到離開該像素的鏈?zhǔn)酱a來決定。例如,在圖10中,到達(dá)和離開像素(12,22)的鏈?zhǔn)酱a都為“6”。在這種情況下,填充方向?yàn)樗较蜃?。從像?12,22)到該筆劃另一條邊上的像素(9,22)來填充水平行22。
在一些情況下,兩個(gè)鏈?zhǔn)酱a結(jié)合表示在該輪廓像素上不必進(jìn)行填充。這意味著,到了一個(gè)不需要填充的頂點(diǎn)。在填充期間,從圖像緩沖器中除去向下和向左的輪廓線像素,以補(bǔ)償數(shù)字或參量邊緣和圖像緩沖器內(nèi)的實(shí)際邊緣之間的差異產(chǎn)生的誤差。填充之后,圖10、11和12中的水平筆劃和垂直筆劃較細(xì)。這是除去過程的效果。圖13示出了最后的結(jié)果。
上面對(duì)圖8至15的描述也可應(yīng)用于圖16至23所描述的數(shù)字5類似的例子。因此,圖22和23內(nèi)的鏈?zhǔn)酱a組和圖16至21像素取向過程的相對(duì)位置直接與填充字母“F”的描述相對(duì)應(yīng)。
雖然上面對(duì)本發(fā)明作了具體說明,但應(yīng)當(dāng)從廣義的范圍來閱讀下面的權(quán)利要求書。
權(quán)利要求
1.一種把字符的外形表示轉(zhuǎn)換成位映象形式以形成字符字形的方法,其特征在于,包含為字符的位映象形式提供一緩沖器;為該字符的鏈?zhǔn)酱a表示提供一緩沖器;把字符的外形畫入第一緩沖器;產(chǎn)生輪廓線的鏈?zhǔn)酱a表示;設(shè)置表示輪廓線沖突的標(biāo)志;掃描鏈?zhǔn)酱a表示的輪廓線,加入遺漏的鏈?zhǔn)酱a標(biāo)志;在第一緩沖器內(nèi)填充該字符的輪廓線內(nèi)部部分;以及打印該字符。
2.如權(quán)利要求1所述的方法,其特征在于,進(jìn)一步包含對(duì)具有多個(gè)部分的字形部分進(jìn)行柵格化。
3.如權(quán)利要求2所述的方法,其特征在于,進(jìn)一步包含讀取一個(gè)部分完整的曲線描述,對(duì)曲線描述進(jìn)行柵格化;然后按順序讀下一個(gè)部分,并對(duì)它進(jìn)行柵格化。
4.如權(quán)利要求3所述的方法,其特征在于,進(jìn)一步包含在描述字符的柵格化過程中,畫出Bezier曲線。
5.如權(quán)利要求4所述的方法,其特征在于,進(jìn)一步包含以恒定的方向描述Bezier曲線段。
6.如權(quán)利要求5所述的方法,其特征在于,進(jìn)一上包含對(duì)起始像素的鏈?zhǔn)酱a初始化,其中4位用于表示一個(gè)節(jié)點(diǎn),3位用于表示方向,1位用于表示標(biāo)志。
7.如權(quán)利要求6所述的方法,其特征在于,進(jìn)一步包含用鏈?zhǔn)酱a標(biāo)志表示輪廓線沖突點(diǎn)。
8.一種對(duì)特定字符的字形通過字符轉(zhuǎn)換提供位映象的方法,其特征在于,包含把字符的輪廓線的曲線描述轉(zhuǎn)換成它們的位映象描述和鏈?zhǔn)酱a描述;在鏈?zhǔn)酱a描述中設(shè)置標(biāo)志,避免過填充和未填充;建立字形外形的參量描述與像素描述之間的差異,消除過填充;以及填充輪廓線內(nèi)部,獲得位映象字形。
9.如權(quán)利要求8所述的方法,其特征在于,進(jìn)一步包含僅掃描所述字形的輪廓線內(nèi)部。
10.如權(quán)利要求8所述的方法,其特征在于,進(jìn)一步包含填充所述字形的輪廓線內(nèi)部。
11.如權(quán)利要求8所述的方法,其特征在于,進(jìn)一步包含根據(jù)字形輪廓線的方向建立填充方向。
12.如權(quán)利要求8所述的方法,其特征在于,進(jìn)一步包含為字形圖像設(shè)置第一存儲(chǔ)緩沖器;為鏈?zhǔn)酱a設(shè)置第二緩沖器。
13.如權(quán)利要求12所述的方法,其特征在于,進(jìn)一步包含所述第一緩沖器的大小與最大的字符相等,一位用于每個(gè)像素。
14.一種對(duì)字符字形進(jìn)行柵格化的方法,其特征在于,包含讀取字形的一個(gè)部分的曲線描述來對(duì)字形進(jìn)行柵格化;柵格化所述一個(gè)部分;讀取第二部分;以及此后,通過讀取和柵格化各順序排列的部分按順序?qū)λ龅诙糠趾腿我粋€(gè)部分進(jìn)行柵格化。
15.如權(quán)利要求14所述的方法,其特征在于,進(jìn)一步包含用方向恒定的Bezier段來描述待柵格化的曲線部分。
16.如權(quán)利要求15所述的方法,其特征在于,進(jìn)一步包含填充字形的部分。
17.一種填充字形部分以在打印過程中產(chǎn)生字符的方法,其特征在于,包含在作畫緩沖器內(nèi)產(chǎn)生字形外形;產(chǎn)生外形的鏈?zhǔn)酱a描述和鏈?zhǔn)酱a標(biāo)志;加入遺漏的鏈?zhǔn)酱a標(biāo)志;以及填充字形部分的輪廓線內(nèi)部部分。
18.如權(quán)利要求17所述的方法,其特征在于,進(jìn)一步包含在作畫緩沖器上產(chǎn)生字形外形時(shí),在待編碼的連續(xù)的曲線像素之間提供矢量方向;以及產(chǎn)生帶有鏈?zhǔn)酱a標(biāo)志的外形的鏈?zhǔn)酱a描述。
19.如權(quán)利要求17所述的方法,其特征在于,進(jìn)一步包含提供鏈?zhǔn)酱a標(biāo)志,以避免因字形尺寸換算產(chǎn)生的輪廓線沖突。
20.如權(quán)利要求18所述的方法,其特征在于,進(jìn)一步包含作畫緩沖器通過分解Bezier曲線畫出Bezier曲線。
21.如權(quán)利要求18所述的方法,其特征在于,進(jìn)一步包含至少通過第二緩沖器保存鏈?zhǔn)酱a值。
22.如權(quán)利要求18所述的方法,其特征在于,進(jìn)一步包含為每個(gè)新產(chǎn)生的字符的各部分的外形像素提供相應(yīng)的鏈?zhǔn)酱a。
23.如權(quán)利要求22所述的方法,其特征在于,進(jìn)一上包含設(shè)置鏈?zhǔn)酱a,指示已畫在作畫緩沖器上的像素的沖突。
24.如權(quán)利要求23所述的方法,其特征在于,進(jìn)一步包含選擇作畫緩沖器的起始點(diǎn)的像素;返回分析鏈?zhǔn)酱a,檢查遺漏的鏈?zhǔn)酱a標(biāo)志;以及由此建立輪廓線沖突。
25.如權(quán)利要求18所述的方法,其特征在于,進(jìn)一步包含檢測(cè)并標(biāo)記沖突鏈?zhǔn)酱a標(biāo)志;設(shè)置額外的鏈?zhǔn)酱a標(biāo)志,避免過填充;以及,填充所述字形。
全文摘要
一種把字符的外形表示轉(zhuǎn)換成其位映象形式的數(shù)據(jù)轉(zhuǎn)換裝置和方法,使用兩個(gè)緩沖器,一個(gè)用于字符符號(hào)的位映象形式,另一個(gè)用于字符外形的鏈?zhǔn)酱a表示。在該方法中使用三個(gè)步驟。第一步在作畫緩沖器上畫出字符外形,并產(chǎn)生帶有標(biāo)志的鏈?zhǔn)酱a表示,以指示輪廓沖突。然后再次掃描輪廓線,在鏈?zhǔn)酱a表示中加入遺漏的標(biāo)志。最后,用輪廓的鏈?zhǔn)酱a表示來填充作畫緩沖器上的輪廓線的內(nèi)部部分,以提供已填充的字符。
文檔編號(hào)G06T11/40GK1118471SQ95109809
公開日1996年3月13日 申請(qǐng)日期1995年8月17日 優(yōu)先權(quán)日1994年8月17日
發(fā)明者周皓, 邵東軍 申請(qǐng)人:普林特羅尼克斯股份有限公司