專利名稱:產(chǎn)生比例合適的字形數(shù)據(jù)的方法
本發(fā)明涉及圖形的影象處理技術,特別是涉及到一種能夠非常真實地按照合適的比例來產(chǎn)生字形數(shù)據(jù)的方法。這一方法能以各種不同的分辨力和不同點尺寸提供位-圖字形數(shù)據(jù)。
在數(shù)控機床上圖形的影象表示問題是經(jīng)常碰到的問題。圖形的影象均是假想的,而且一般用“模擬”形式執(zhí)行,該模擬形式具有連續(xù)的平滑的流動線,有無限多個角度值,而且在其內部結構尺寸上有細微的變化。
圖形影象的研究和用墨水在紙上畫點陣同樣簡單,這就意味著沿輪廊線上測量無限多個角度值,輪廊線以360范圍把點陣完全包圍在內。與此類似,在該點陣的無限多個位置處,可以取無限多個測量值。
但是,這樣一種用圖形的影象要以數(shù)字形式表示時,有些地方的外部特征要受到某些主要限制。首先,在一個兩維座標面內對位置的有限集之間進行測量時,無限多個結構尺寸及其細微變化可以用結構尺寸的離散集表示。其次,在很多數(shù)字系統(tǒng)中,只存在兩個離散角垂直角和水平角。
在上述限制條件下,人們只能產(chǎn)生一個點陣的“幻影”,而它的尺寸、平滑度和位置都將是經(jīng)過折衷處理的。該幻影的滿意程序(或者說,影象的折哀處理程度)與如下兩個因素直接有關第一,數(shù)字系統(tǒng)的分辨力決定了可尋址的位置的數(shù)目,因此,也決定了有利于實現(xiàn)幻影的可表示的結構尺寸的數(shù)目。分辨力愈高,幻影的質量愈高。
第二,用來表示幻影的關鍵角度、線段、和內部結構尺寸的選擇是否合適,對幻影的滿意程度影響很大。在上述點陣的例子中,為產(chǎn)生該點陣的幻影而建立起的關鍵點可能就是它的高度和寬度。但是,在方形點陣和圓形點陣之間,并無本質的區(qū)別。因此,圓形點陣的幻影可能就是缺了四個角的方形點陣演變而成的。在這種方法中,除垂直角度和水平角度以外的任何其他角度的幻影都已經(jīng)能產(chǎn)生。
當要對數(shù)字定義的影象確定合適的比例時,將出現(xiàn)額外的復雜情況。這主要是指影象要從一個數(shù)字系統(tǒng)轉向另一個數(shù)字系統(tǒng)(也就是說,從一個幻影轉到另一個幻影)。
這些數(shù)字影象可以以定義影象邊界的輪廊線方式存在;也可以以填滿影象內部的點陣或劃線的方式存在。但不管是那種情況,其基本問題是一樣的。無論是那一種表示法都可以定義圖形的影象而不會損失某些細節(jié)。確定影象的比例時將使細節(jié)有所損失。從輪廊線轉換到劃線,以及從劃線轉換到輪廊線,都將使細節(jié)受到損害。
由于人們主要關心的是產(chǎn)生密集的充填影象,下面介紹的內容基本上局限在圖形影象內部所填充的點陣或劃線的產(chǎn)生方法上?;旧嫌袃煞N方法產(chǎn)生多種尺寸的密集充填的圖形影象。
第一種方法是利用由劃線或點陣組成的數(shù)字表示法,已經(jīng)能精心地利用該法來組成影象的最佳幻影。然后在大比例時將劃線或點陣圖形重復多次,在縮小比例時,去掉一些劃線或點陣,就可以完成比例選定工作。在確定那些點陣或劃線在按所要求的比例尺寸下生成最佳幻影時是關鍵值時,就要引起上述問題。因為與原來的“模擬”圖形的影象有關的重要信息正在逐步損失掉,所以這種方法不能產(chǎn)生質量最佳的影象。
第二種方法是將數(shù)字影象最初定義為輪廊線,然后選定該輪廊線各部份的比例,并且從數(shù)字概念上“充填”上劃線或點陣。如果描述原來的輪廓線時具有足夠多的細節(jié),那么所得的幻影就比較好。但是因為采用輪廓線只能是作為一種空心殼體方式的描述,同時劃線或點陣只表示一個數(shù)字系統(tǒng),則其尺寸、位置、平滑度和影象的內部結構尺寸都應再一次進行折衷選取。將“模擬”影象變換成數(shù)字形式時不可避免地要引起誤差,因而將產(chǎn)生難以預期的結果。
在圖形輸出裝置上,作為圖形的影象的字符輸出(為字母形式)要求對數(shù)字影象選取適當?shù)谋壤H绻诿枋鲎址妮喞染€時要求有足夠高的分辨力時,人們就可以把數(shù)字影象認為是“模擬”式的。也就是說,它沒有很大的細節(jié)損失。為生成低分辨力的輸出的劃線或點陣,選取數(shù)字表示法的比例時要作某些特殊的考慮,才能生存最佳的字符幻影。下面對比例適當?shù)淖中卧O計用的系統(tǒng)作出基本描述,字符比例可以在各種不同尺寸和各種不同的輸出分辨力下選取,只要能仍然保持最佳的字符設計。
本發(fā)明是一種具有真實比例的字形數(shù)據(jù)處理方法,它能以各種分辨辨力和任何點尺寸提供位-圖字形數(shù)據(jù)。本發(fā)明簡化了美學上的一些問題,這些問題在通過標準的線性法將字符的輪廊線描述按數(shù)學比例降到很低的分辨力和點尺寸時要碰到。根據(jù)本發(fā)明,委托給字符數(shù)據(jù)庫來得到的改善了的比例率(1)、在字符輪廊線上的某些關鍵點(把它們命名為骨架點)以及在這些骨架點之間的專門指定的字符結構尺寸。(2)、當字符已定好比例,并且轉移到位-圖上時,這種附加數(shù)據(jù)根據(jù)對結構尺寸關系內進行必要的控制,以提高確定比例的算法。
本發(fā)明利用了一種方法,用這種方法將字符的輪廊線“展寬”和“壓縮”,使輪廊線上某些特定的點(骨架點)和“位-圖網(wǎng)格”適當?shù)貙?。這種概念的數(shù)學基礎是如下三種方法中的一種(1)、將字符的輪廊線截成許多小段(在一對骨架點之間截取);(2)、在所截線段上,全部填補上座標,使第一骨架點和上述網(wǎng)格對準;(3)、按比例因子對所截線段取線性比值,使第二骨架點和網(wǎng)格對準。
但對一個分辨力很低的器件的字符確定比例時,在下述情況下要碰到美學問題(1)、羅馬字符由劃線組成;(2)、劃線一般是水平的和垂直的,以使越過該頁碼時能保持音節(jié)或筆法平穩(wěn);(3)、字符線段的一般取向為,與輸出器件在上述頁碼上輸出點陣的方向平行或垂直。這個問題可以認為是和經(jīng)過二次分篩時的半色調影象所碰到的問題類似。如果經(jīng)二次分篩后的角度和原來分篩的角度匹配,就能得到一個有干擾波紋的圖型。為減少波紋效應,要改變兩次分篩的角度。根據(jù)這一點就能解釋為什么在斜體字樣和其他對角線字形的詞干線條粗細表現(xiàn)出很小的變化,同時也可以從理論上解釋為什么對除臨摹、素描、反臨摹和反素描之外的所有其他角度下的那些詞干線條粗細很少需要控制。
本發(fā)明的一般的目標主要是提供比例適當?shù)妮喞染€數(shù)據(jù)。
本發(fā)明的一個特定目標是提供比例合適的真實的字形數(shù)據(jù),由這種數(shù)據(jù)能夠產(chǎn)生不同分辨力和任何點尺寸的位一圖字形數(shù)據(jù)。
本發(fā)明另外一個目標是提供一種字符數(shù)據(jù)庫,數(shù)據(jù)庫包括字符輪廊線上的許多關鍵點,也包括在這些關鍵點之間的字符的內部結構尺寸。
本發(fā)明的第一個特點是,字符數(shù)據(jù)庫規(guī)定了在每個字符格式內的有關的字符點、線段及其美學關系的子結構,所以當字符格式在位一圖產(chǎn)生過程中發(fā)生變化時,仍能保持字符的完整性。
本發(fā)明的第二個特點是,規(guī)定字符的結構尺寸的控制具有優(yōu)先權,即在處理樹形結構內的有關字符的點和線段的順序排列中優(yōu)先。
本發(fā)明的第三個特點是,字符格式的子結構點和子結構線段均與網(wǎng)格對準,同時利用規(guī)定的非網(wǎng)格對準,來控制對角線形式的字符的劃線角度。
本發(fā)明的第四個特點是,當要求精確地顯示那些可能已經(jīng)設計成字符形式的結構尺寸的任何變化,而且輸出位一圖的分辨力足夠高時,結構尺寸的控制將自動失效。
本發(fā)明的第五個特點是,由規(guī)定的Y分類或分區(qū)將字符輪廊線分成小段,使所有落在某個指定區(qū)域內的字符點或線段都看成是一致的。
本發(fā)明的第六個特點是,在同一個字符點上的樹形數(shù)據(jù)結構的各個獨立的根和枝在收斂時要產(chǎn)生矛盾,在該字符的座標表內加進一個附加點,可以避免矛盾,所以這個附加點就成為與一條枝或一個根所附屬的,而原來的點則仍然保留和其他枝或根所附屬。
本發(fā)明還有一個特點是,沿已經(jīng)定好比例(“展寬”以后或“壓縮”以后的)的字符輪廊線方向上的那些小段具有很大的反差,使字符點或線段能在輸出網(wǎng)格的背景上移動。
本發(fā)明所指出的這些目標和其它一些目標及特點要完全掌握,還得通過附圖中所表明和所示出的最佳實施例的詳細描述來達到。
圖1表示原來的字符,它由一組圍繞字符輪廊線按順序填入的X/Y組對所確定。
圖2表示圖1的字符處置,整過字符的Y值經(jīng)處置后,使Y線段的絕對位置處在平穩(wěn)的輸出象素或Y網(wǎng)格線上。
圖3是表示字符輪廊線的處置圖,處置是通過骨架信息的應用和處理,產(chǎn)生位一圖之間的最佳轉換。設計圖3所示的圖形是為了疊加在圖2的字符上。
圖4表示經(jīng)過平移和對準后的圖2的字符,處置時將骨架點及有關的其他點均經(jīng)過適當?shù)匾苿?,同時只沿X軸進行網(wǎng)格和非網(wǎng)格對準,而字符輪廊線上所有其他點均通過移動和確定線性比例來重新定位,這樣就能保持平滑的輪廊線。
圖5表示由網(wǎng)格對準所建立起的骨架點和結構尺寸的有關程序。設計圖5所示的圖形是為了疊加在圖4的字符上。
圖6是非網(wǎng)格對準所建立的骨架點和結構尺寸的有關程序的圖形。設計圖6的圖形是用在疊加在圖4的字符上的。
圖7是表示沿Y-網(wǎng)格軸上的字符輪廊線的處置情況,而且將疊加在圖8上。
圖8表示經(jīng)過圖7所示的描繪處置之后的字符。
圖9是表示在Y-網(wǎng)格軸上的骨架點和結構尺寸有關的程序圖形。設計圖9所示的圖形是為了將它疊加在圖8的字符上。
對本發(fā)明的過程的很好了解必得首先描述與本過程有關的理論及述語。經(jīng)此之后,在描述該過程時要聯(lián)系到該過程的一個應用特例,即示明一個字母K的修改過程用的一序列附圖。最后,為完成該過程用的Fortran源代碼將是前一個集。
過程理論和述語1.0過程控制本發(fā)明過程改善了由于孤立地確定某個特定比例所引起的比例問題,并提出如下的控制措施。
1.1網(wǎng)格對準平滑的字符輪廊線變換到離散的象素時,經(jīng)常要引起輪廊線變平垣或者出現(xiàn)“孤寡”的象素。按照本發(fā)明,可以用一種方法完成這一變換,這種方法是將相鄰的劃線“布置”成最佳長度,以產(chǎn)生可能的最佳輪廓線表示。要完成這種表示,可將輪廓線上的特點對準點或者特定的非對準點與所建立起的網(wǎng)格對準。這里所用的術語網(wǎng)格,是指一系列的水平線和垂直線,它們相交于輸出裝置上的所有可尋址的點陣的中心。顯然,這種網(wǎng)格的疏密程度是隨字符輪廓線在確定比例時的點尺寸和輸出器件的分辨力而變化的。一般來說,大部的X值的極值和Y值的極值必須與網(wǎng)格適當?shù)貙?,而主要的斜紋劃線并不要求對準。
1.2字符相對于基線和高度等的內部順序為得到光學的一致性,將字符輪廊線故意設計成為略有“差異性”的字符,鑒于這一原因,通常對字符高度、基線等進行失控的舍入,才能產(chǎn)生失準的字符。因此,在字形的某些關鍵的水平線上應當建立起有關控制的準則。建立準則的要求是,要使內部字符的形式保持正確的內部比例。
為了這一原故,將沿字符輪廊線的某些線段連接起來,以便確定每行文本中從頭一個字符到最后一個字符水平布置的“區(qū)段”(Y-分類)。典型的區(qū)段是由基線和X-高度上的Y-值所定義的。落在該區(qū)段的所有內部字形都確定為垂直方向上的比例,這樣就能使代表基線的Y-值落在所規(guī)定的基線象素,同時使X高度上的Y值滿足X-高度的象素的要求。
1.3X/Y的內部尺寸在設計中,某些內部尺寸只要所取比例適當,就應保持協(xié)調(相對于另一個)。然而,由于舍入誤差的影響,這樣一些內部尺寸關系經(jīng)常會失調。因此,在確定比例時,要提供一種控制內部尺寸關系的方法。
內部尺寸的建立一般是連接一對有關的骨架點和“測出”在它們之間的輸出裝置的象素的數(shù)目。在這種方法中,允許內部尺寸按照要求向上或向下舍入(也就是說用最佳象素數(shù)目來表示)。但是,某些關鍵字符的內部尺寸必須進行附加的控制,才能保證視覺和其他關鍵字符形式協(xié)調,例如和字符的詞干、寬度和襯線等協(xié)調。這種協(xié)調可以是在一個字符之內,也可以一個字符與另一個字符之間的協(xié)調。要完成這一工作,只要連接一對有關的骨架點和另外規(guī)定一個可控的內部尺寸,利用這個尺寸將他們連接起來。例如,定義字符詞干左側的骨架點連到該字符詞干右側上的骨架點上,然后對字形中的所有詞干建立起可控制的內部尺寸,來確定每個比例時刻的這兩個骨架點之間的距離。
由于字符經(jīng)常設計成有很小的不協(xié)調性,才能使它們在高機辨力器件上輸出時具有光學上的“校正”,本發(fā)明可提供一種方法,當分辨力對準確定顯示內部尺寸變化已足夠時,利用這種方法可以“消失”可控制的內部尺寸。這種方法稱為“1 1/4 象素消失”技術。
1.4以比例時間確定可控制的結構尺寸建立可控制的內部結構尺寸所用的方法是,將字符輪廓線描繪所作的測量值轉換成該結構尺寸最佳表示所需要的輸出象素的數(shù)目。但是,在確定結構尺寸中某些微小變化會可能引起象素表示中的重大變化(起因于舍入誤差),必須調整某些可控制的結構尺寸。由于這一原因,應具備一個系統(tǒng),通過該系統(tǒng),可以把一個可控制的結構尺寸作為標準建立起來,所有其余的結構尺寸就不根據(jù)它對該標準的變化情況而建立。采用這種方法,該標準的確定對輸出設計的總“線條粗細”有所影響,同時這個“線條粗細”在整個字形上要保持恒定。
1.5字符關系的程序確定在確定比例時,并不是字符的所有結構尺寸都可以控制。有些是允許改變的,這樣才能使另外一些結構尺寸保持不變。例如,假如小寫字母“n”的兩部份詞干和總寬度受到限制,那么就必須允許字符的輪廊線和它原來的設計有所改變。否則,就會出現(xiàn)一個難以解決的矛盾。但是,最好的辦法是采取某種折衷,也就是說,在某些結構尺寸上進行部份限制來控制字符的結構尺寸。通過連接程序或有關骨架點就可以確定這點。因此,正如在數(shù)據(jù)描述一節(jié)中所指出的那樣,在完成骨架處理中所采用的程序是非常重要的,而且要由設計師規(guī)定。
1.6斜體字斜體字提出了一個特殊的問題或“挑戰(zhàn)”。網(wǎng)格對準和控制結構尺寸的概念將難以嚴格地應用到斜體字的設計中,其原因是,這些概念的XIN(256),YIN(256)-比例確定之前描述字符輪廊線的坐標表。
NUMI-表中的坐標數(shù)(目前最大值為256)。
IPEN(256)-XIN、YIN坐標的Y-分類賦值。
普通/字符輸出/XOU(256)、YOU(256)-經(jīng)輸出網(wǎng)格對準操作之后的描述字符輪廊線的坐標表。
2.2骨架數(shù)據(jù)描述骨架數(shù)據(jù)為確定合適的比例提供“信息”。它可以分成幾種類型,每種類型和上面提出的一個概念或幾個概念相對應。
a)骨架點本發(fā)明過程的基本概念就是“骨架點”。這些點是描述字符輪廓線所用的坐標的子集,同時由于這些點要求和輸出位-圖網(wǎng)格進行有控制的對準,所以這些點都是從坐標表中選出來的。骨架點通常都是X的極值和Y的極值。它們存在于兩個集中X-骨架點在X座標上求取、Y-骨架點在Y-坐標上求取。
b)關連骨架點“關連點”包括所有骨架點的子集。事實上,由于骨架點通過它們之間的相互聯(lián)系形成“樹形”的連接,所以大多數(shù)骨架點都是關連骨架點。相互聯(lián)系只能是在一個方向上的(朝向分支的方向),也就是說,當骨架點變換時,它們的關連骨架點也要發(fā)生變換。如果關連點沒有額外的變化,則對它的關連-或(朝向根的方向)并不產(chǎn)生影響。總的來說,一個骨架點可能有一個以上的關連點,但是,任何一個關連點都不可能是一個在雙根系統(tǒng)中的關連點。
根據(jù)這個理由,當處在特殊情況下,要求有兩個獨立的根才能在同一關連點上“收斂”時,就有必要自動地插入一個重復點。用這種方法應用,取決于骨架點之間的輪廊線線段的局部比例如何確定才能提供對準和控制。然而,這些布局比例的確定,可能導致斜體字的傾斜角在字符之間變動,甚至在一個字符之內也要變動,從而產(chǎn)生光學上的擾動結果。
因此,在斜體字形時要采取特殊的方法,這個方法是上述所有概念的綜合,但是只能進行不多的控制,除此之外,斜體字字符在上述處理過程中的第一步必須進行非斜體化,然后再重新斜體化。其結果是斜體角度被保留下來,輪廊線上的各個關鍵點是經(jīng)過網(wǎng)格對準的,某些結構尺寸也是可以控制的。但是某些相鄰的劃線的“處置”長度并不是最佳的,故要產(chǎn)生某些不合要求的“平直”和“窗口”般的象素。
2.0數(shù)據(jù)描述根據(jù)本發(fā)明來確定比例,其成敗的基本依據(jù)是正確地確定數(shù)據(jù)。這種數(shù)據(jù)由兩個主要的數(shù)據(jù)段組成(1)、限定字符外的字符輪廊線(或輪廊線系);(2)、控制字符輪廊線的比例的“信息”。下面給出采樣數(shù)據(jù)。
2.1字符輪廊線數(shù)據(jù)只要每種輪廊線是連續(xù)的和封閉的(也就是說,輪廊線的末端必須與始段相交),則字符輪廊線可用任何一種方法描述。為了存儲本例子中的字符輪廊線,已任選擇使用矢量/樣條點表示法。這種表示法將是一種真實地獨立解法,使其有可能在某種特殊應用中產(chǎn)生適當詳盡的矢量周線。
低分辨力輸出器件時所形成的位一圖的最終質量與輪廊線描述的質量有關。
下面是用來描述字符輪廊線所提出的數(shù)據(jù)陣列。
普通/字符輸入/
所標識的點就成為兩個獨立的點,每個點都有它自己的根。
c)對準屬性并不是所有骨架點都力圖與網(wǎng)格對準。未對準就使它有可能將主要對角線上的字符劃線維持某個角度和線條粗細。它也允許沿字符輪廓線的有界比例線段上簡單地賦予一些骨架點。因此,每一骨架點都具有一個對準的開關屬性,與此對應的集是“通”或“斷”。
d)X和Y的結構尺寸在骨架點和關連骨架點之間的每一段連接均是通過某個所建立起的結構尺寸完成的,可能是零結構尺寸(在此情況下,象素內的輸出結構尺寸實際上直接由輸入輪廓線結構尺寸經(jīng)過入后確定),也可能是從預先建好的X或Y結構尺寸表中選擇的某個結構尺寸。此時應當注意,X和Y結構尺寸表示應具有和在輸入單元內所測出的那些結構尺寸(也就是說,用它們來確定上述字符的輪廓線)。這些結構尺寸以比例因子轉換后,能夠表示成與網(wǎng)格象素結構尺寸相對應的結構尺寸。X和Y的結構尺寸可以以全局結構尺寸的方式存在(在這種情況中,整個字形都采用某些規(guī)定的結構尺寸),也可以以局布結構尺寸方式存在(在此種情況下,只能在某一個字符內采用某些規(guī)定的結構尺寸)。全局結構尺寸以字形方式存儲,而局部結構尺寸以每個字符的方式存儲。
e)Y-分類用來描述字符輪廓線的每個坐標均在文本的一行內連接成水平移動的“區(qū)段”。Y-分類數(shù)據(jù)由兩部份組成(1)Y-分類或“區(qū)段”的確定;(2)坐標賦值。Y-分類由兩個Y-值確定,一個Y-值在頂點,另一個Y值在底部點。例如,所有小字體字符的Y-分類由兩個Y-值確定,一個是基線的Y-值;另一個是小字體字符高度的Y-值。因此,那些必須相對于這兩個Y-值定位的所有輪廓線坐標都連接到或分配到這一個Y-分類上。與此同時,在同一字符內還可能有一個附加的要求,才可能使字符的下行文字對準?;€和下行文字底部之間的“區(qū)段”定義為Y-分類,而描述下行文字的輪廓線上的坐標則被分配到該Y-分類上。
正如在X和Y結構尺寸的情況中那樣,在輸入單元內建立起確定的Y-分類,然后轉換成有一定比例因子的輸出象素。
f)斜體字的斜角為對斜體字形進行某種特殊的處理,每個字符的斜角與字符的骨架點數(shù)據(jù)一起存儲起來。在處理所有Y-坐標的過程中,也就是說通過Y-坐標處理來防止在最后的輸出中的斜角的任何變化的過程中,可以用這個斜角對字符進行“非斜體化”。
除此之外,在字形中的大斜角在整個字形情況下要進行全局存儲。經(jīng)過Y-處理后,又用這個角度對每個字符重新進行“斜體化”。在這種方法中,在每個字符之內將斜體角設計成稍有變化,就可消除低分辨力時的視覺差異。
g)處理順序骨架點處理的順序直接列成表格。該表的次序必須仔細排妥,才能保證輪廓線上那些最重要的點的位置首先確立。然后才確定那些不甚重要的點的位置??梢哉J為,輪廓線上最重要的那些點的選擇(也就是表中順序的確定)是一個設計選擇問題。
下面是“確定比例的信息”時,目前所用的數(shù)據(jù)變數(shù)的定義普通/參數(shù)/XPIX,YPIX-X和Y象素的結構尺寸(網(wǎng)格線之間的距離),以輸入字符輪廓線的坐標單位來量度。根據(jù)輸出的分辨力和點尺寸以及根據(jù)基本數(shù)據(jù),可以按比例因子對它們進行計算。
普通/骨架/NLOOP-在這一字符中的閉合回路輪廓線的數(shù)目。
LPEND(20)-在每個閉合回路輪廓線內,最小XIN、YIN坐標的指數(shù)組成的陣。
NCLAS-在字符內Y-分類或水平“區(qū)段”的數(shù)目。
ICLS(10,2)-Y-分類的定義域。
(N.1)-Y-分類“區(qū)段”的底。
(N.2)-Y分類“區(qū)段”的頂。
NUMS-骨架點數(shù)目(最大值=96)。
ISK(96,10)-由表征骨架點坐標、相關性和結構尺寸等的指數(shù)組成的骨架陣。(N.1)-定義骨架點的XIN、YIN坐標陣的指數(shù)(N.2)-與該骨架點有關連的骨架點的數(shù)目。
(N.3)=1(如系X骨架點)=2(如系Y骨架點)(N.4)~(N.10)-關連骨架點的指數(shù),它由對X或Y可控的結構尺寸的指示字綜合得到(在ASSOCY.FIN.中進一步介紹)。
IXDIM(32)-指向關連骨架點的X可控制的結構尺寸。
IYDIM(32)-指向關連骨架點的Y可控制的結構尺寸。
普通/斜體/ANGIT-該字符的斜體角GLANGT-整體的斜體角(所有字形的平均值)。
3.0操作程序在用二進制的“位”生存輪廓線之前,根據(jù)規(guī)定的點尺寸和分辨力來調節(jié)字符輪廓線的程序步驟由下面給出。
3.1建立輸出點尺寸和分辨力為計算“位一圖”網(wǎng)格的象素X和Y的結構尺寸,要利用輸入字符輪廓線數(shù)據(jù)和輸出“位一圖”數(shù)據(jù)兩者的點尺寸和分辨力。這種轉換的細節(jié)在下面的INPNCS.FTN中給出。
3.2送入數(shù)據(jù)將字符輪廓線數(shù)據(jù)和骨架點數(shù)據(jù)兩者均送入存儲器中,在下面的LOADCH.FTN和LOADSK.FTN中提出內部數(shù)據(jù)格式的細節(jié)。
3.3非斜體化如果將字符歸類為斜體字(由于存在除零以外的一個角度),那么,在任何處理進行之前只要能夠建立起角度,就必須完成非斜體化。在下面的UNITAL.FTN中介紹它的細節(jié)。
3.4Y-分類處理在字符輪廓線內的各個確定的線段都要單個地確定比例,才能在規(guī)定的Y-分類之內提供對準和保持正確的內部比例。在LPSCAL.FTN中介紹它的細節(jié)。
3.5將X和Y的結構尺寸轉到輸出象素上建立起來的整體的和局布的結構尺寸都以輸入數(shù)據(jù)單位(描述字符輪廓線的單位)來定義的。每一個輸入數(shù)據(jù)單位都必須轉換到以象素結構尺寸為基礎的輸出象素上,正如在INPNCS.FTN.中所建立的那樣。在下面的DIMPIX.FIN中提出更詳細的解釋。
3.6Y-網(wǎng)格對準和Y-關連和網(wǎng)格對準或者不對準,都要通過Y-骨架點的處理,正如由對準屬性開關所規(guī)定的那樣。當每一個單獨的骨架點向上移動或向下移動時,它的關連骨架點也要移動同一量值。這一過程要一直進行到Y-骨架點表內的值全部完畢時為止。在下面的GRYAJ.FTN/GRXAJFTN和ASSOCY.FTN/ASSOCX.FTN。中將詳細介紹。
3.7兩骨架點之間的線段的Y-處理由于骨架點是定義字符輪廓線的坐標的子集,所以可將它們作為字符輪廓線上各線段終點的標志。必須將這些線段“擴展”或“壓縮”,才能使骨架點與網(wǎng)格適當?shù)貙剩⑶胰匀荒鼙3制交屯昝赖妮喞€。要做到這一點就應對兩個單獨的處理過程中的Y-線段求取線性比例。在XPROC.FTN/YPROC.FIN.中將介紹它的細節(jié)。
3.8斜體化在適當?shù)臅r候,字符要再一次斜體化,在下面的ITALIC.FTN中詳細介紹3.9X網(wǎng)格對準和X-關連在重新斜體化之后(如果合適時),和網(wǎng)格對準或者不對準,都要通過對X-骨架點的處理,正如在對準屬性開關所規(guī)定的那樣。當每一個單獨的骨架點向右或向左移動時,它的關連骨架點也要移動同一量值。這一過程要一直進行到X骨架點表內的值全部完畢時為止。在下面的GRXAJ.FTN/GRAJ.FTN.和ASSOCX.FTN/ASSOCY.FTN中將詳細介紹。
3.0兩骨架點之間的線段的X-處理由于骨架點是定義字符輪廓線的坐標的子集,所以可將它們作為字符輪廓線上各線段終點的標志。必須將這些線段“擴展”或“壓縮”,才能使骨架點與網(wǎng)格適當?shù)貙?,并且仍然能保持平滑和完美的輪廓線。要做到這一點就應對兩個單獨的處理過程中的X-線段求取線性比例。在XPROC.FTN和YPROC.FTN中詳細介紹。
3.11 X移動在所得出的“位一圖”字符中,產(chǎn)生最佳長度的相鄰劃線“運行段”的關鍵在于“適當?shù)亍笔筙和Y骨架與網(wǎng)格對準。當骨架的Y值可以由Y象素的結構尺寸平分時,Y骨架點的對準較為合適。當骨架的X值減掉X象素結構尺寸的一半,其所得值能由X象素的結構尺寸平分時,X骨架點的對準較為合適。為使處理簡化,可以認為只要骨架的X值能由X象素的結構尺寸平分時就認為X骨架點已對準。因此,在處理這一點時,就必須把所有的X值增加一個距離,其大小為X象素結構尺寸的一半。在下面的NCSBLO.FTN中將詳細介紹。
3.12 “位一圖”產(chǎn)生在這一點上,對字符輪廓線的處置,就可以產(chǎn)生字符的外部輪廊的邊界。如果填上二進制“位”,就可以得出該字符的一個極好的近似形。填充技術基本上是一種處理每個矢量的方法,它依順序圍繞最新建立起來的輪廓線,以X-網(wǎng)格線搜查各矢量的所有交點。所得到的交點就是劃劃線的轉折點,換句話說,就是二進制位的極性轉換到該劃線內該二進制位和以后的幾位的地方。由于完成了這個處理,就可能字符的所有垂直劃線聚集在一起,每一個都包含一個Y象素的(轉折點)的非分類的表。一當分類之后,所有奇數(shù)轉折點都被認為是“通”劃線運行段的起點,而所有偶數(shù)轉折點都被看成是“斷”劃線運行段的起點。
4.0 本發(fā)明方法的特殊應用在本發(fā)明方法中的理論和述語的詳細介紹之后,就有可能將本方法用在某種特殊應用中,例如在圖1至圖9中的字母“K”的圖形處置。該圖畫在 1/4 × 1/4 網(wǎng)格圖中,設計的目的是用來與另外一個彼此復蓋。在圖1至圖9的每個圖中只畫出網(wǎng)格圖的一部份。以便使復蓋圖能寄存到下面的圖上。
現(xiàn)在看一下附圖,原來的字符(字母“K”)如圖1所示,它由該字符周圍的列在表內的X/Y成對坐標所組成的集所限定。X/Y成對坐標則由節(jié)點表示,而節(jié)點則由圖1中字符外部輪廓上的參考數(shù)字20表示。
輪廓線上某些特定的Y值關鍵的Y線上或落在其周圍,也就是說,從字形內的一個字符到另一個字符均必須垂直對準的那些字符部份。本例子示明基線、X高度、增升高度、Y-線段(它們均與X軸平行)。
圖2表示整個字符的處置情況,即為使Y-線段的絕對位置能夠與一個平坦輸出的象素或X軸網(wǎng)格線進行疊加。沒有準確定在所建立的Y線段上的坐標都要重新確定,重新定位時采用了由它的賦值Y分類所決定的線性比例。由兩個所建立的Y-線段的組合可以定義Y-分類。
在圖2中,字符基線已經(jīng)向下靠到最近的一根X軸網(wǎng)格線上,這樣又使整個字符向下移動。那么X高度和增升高度也靠到最近的X軸網(wǎng)格線上。并由所指出的Y分類(A或B)來確定所有點的比例如何選取。
為了了解這些處置之后的效果,可以將圖1中標有A的那些節(jié)點的相對位置和圖2中A點的相對位置。應該注意,對字符的X-高度部份至關重要的那些節(jié)點都必須重新定位,才能使這些節(jié)點都處在基線上或在基線周圍,同時使X-高度的位置正好在以基線象素或以X-高度象素表示的網(wǎng)格線上,或者在網(wǎng)格線周圍。還應該注意,這些節(jié)點實際上并無必要處在由Y-分類所確定的兩根Y-線段之間,正如圖2中節(jié)點B1和和B2所示的那樣。
圖3表示為產(chǎn)生位一圖的最佳轉換時字符輪廓線的操作,轉換時主要應用和處理骨架信息。這種信息定義了必須移動的關鍵骨架點,移動的目的是為了與輸出網(wǎng)格確保一個特定的關系,同時還保證各相關點或關連點的特定結構,經(jīng)處理后的這些關連點的位置就是最后移到相關的骨架點及其自身對網(wǎng)格的相對位置上。
在這種情況下,各特定結構尺寸間的一致性甚為重要,不同字符之間或甚至在一個字符之內,控制結構尺寸是從一個所建的表格中選取,以便抵消實際數(shù)據(jù)引入任何一種變化。在這一點上,唯一關心的是X軸內的處理情況。
在圖3的例子中,(*骨架點是第一個對準的網(wǎng)格,圖中用四分之一分格符號表示。利用骨架數(shù)據(jù)的結構樹,可以得到在1*骨架點上的任何移動,都將作用在2#、3#、4#等關連點上。這些骨架點都用圓圈表示,骨架點的圓圈都有箭頭從圓圈引出,但沒有箭頭引向圓圈,而關連點則有箭頭引向其圓圈。網(wǎng)格對準了的點都用四分之一分格表示,而網(wǎng)格未對準的點都用空白的圓表示。對于關連點,要作如下的選擇(1)、移動這些點中的每個點,然后對它們進行網(wǎng)格對準;(2)、只對它們進行簡單地移動,但不進行網(wǎng)格對準;(3)、將它們從1點移動一個特定距離,如圖中有控制的結構尺寸時的情況所示。
2#點和3#點經(jīng)過處理,但他們的分支已經(jīng)豐滿。但是,在4#點經(jīng)過這種處理之后,繞4#點引出的附加關連分支應作進一步的移動和和對準,如在圖中所示的那樣。應該提醒的是,利用結構尺寸G來控制1#點和2#點、3#點之間的距離,同時也能控制4#點和5#點之間間的距離,才能保證襯線長度協(xié)調一致。利用結構尺寸F來控制1#點和4#點之間的距離,才能保證在各字符之間的詞干寬度協(xié)調一致。
還應該指出,10#點是不必進行網(wǎng)格對準的,只要作些移動,正如7#點和9#點處置時所決定的那樣。只有這樣才能保證7#點和10#點之間的對角輪廓線和9#點和10#點之間的對角輪廓線并不隨角度變化。如果所有這些對角輪廓線的角度都保持不變,那么從詞干的一側到另外一側時它們的關系仍將保持不變。這樣就可避免字符劃線可能出現(xiàn)不希望的錐聚現(xiàn)象。
收斂于同一關連點的兩個骨架點之間存在明顯的矛盾,同樣一點可能往兩個不同方向移動,利用控制這種收斂性的規(guī)則可以解決該矛盾。首先,不多于兩個骨架點能夠收斂在一個關連點上;其次,第二個輪廓線的坐標應插入同一位置的輪廓線坐標表內。
參見圖4,在骨架點和關連點適當?shù)匾苿硬⑦M行網(wǎng)格對準或非對準之后,輪廓線上的所有其他點則可通過移動和確定線性比例而重新定位,以便保持一個平滑的輪廓線。應該注意,10#點、15#點和6#點不僅必須分別用10A#點、10B#點、15A#點、15B#點和6A#點、6B#點代替,以便解決收斂性的矛盾,而且必須將它們適當?shù)匾苿樱拍鼙3謱蔷€的角度。這樣得到的字符如圖4所示,它表示示已經(jīng)調整到只沿X軸上的網(wǎng)格上以后的字符。
骨架點的關連程序對最終解是很重要的。如圖5中的程序圖所示“K”的垂直詞干是被建立起的第一個字符結構尺寸,其后就是襯線的長度和字干右側與字符右邊最遠點之間的距離。由于這一原因,字符的總寬度變成與襯線、詞干和對角線等有關。那么,所有其它結構尺寸都與以前已經(jīng)建立起的這些結構尺寸有關。
圖6表示由非網(wǎng)格對準建立字符結構尺寸的程序。除此之外,設計這一圖形可以作為與圖4進行疊加時使用。
圖7表示Y-軸上的字符輪廓線的處置情況。圖8表示經(jīng)過圖7中Y-軸處置后的結果。
圖9表示Y-軸的關連程序。應該指出,Y-軸的關連的相互依賴關系較弱。襯線高度控制是在相同的水平上實現(xiàn),也就是說,每一襯線都是一個新根的起點,而且它不因以前處理過的襯線高度而有所改變。除此之外,還應當再次注意的是,要對各對角線進行處理,才能維持對角線的角度不變。
根據(jù)這一點應該看到,圖1至圖9表明了Y-線段的處理,然后進行字符的X軸處置,在此之后再進行Y-軸的處置。與此對應,上面討論的理論部份向前置定它的操作反程序,也就是說先進行Y-軸處置,然后經(jīng)過最初的Y-線段處理以后再作X-軸處置。在非斜體字符中,本發(fā)明方法的練習中無論那一種程序均可以使用。除此之外,對于非斜體字符,均可利用先X-軸,后Y-線段,最后進行Y軸處理的程序。
在斜體字符的情況下,只能使用一種處理程序,那就是先Y-線段,后Y-軸最后是X-軸。應該看到,在斜體字和非斜體字兩種程序情況下,Y-線段處置必須在Y軸處理之前進行。
FORTRAN程序為練習本發(fā)明中的方法,設定的FORTRAN原碼如下5.1 BLACK.FTN-確定比例用的操作字符輪廊線下面是處理單個字符的主要線段,通過整個骨架點(ISK)有兩條路線第一條路線確定,并處理所有的Y-骨架點的基準值;同時確定第二條路線,并處理所有的骨架點的基準值。這個方法就沒有必要在確定次序(參見X和Y的數(shù)據(jù)表)時提出骨架數(shù)據(jù),而仍能保證在斜體字字形時被處理的數(shù)據(jù)適宜。
注在從(XIN.YIN)和(XOU.YOU)陣中取出輪廊線數(shù)據(jù)并進行分類或送到(XIN.YIN)和(XOU.YOU)陣的程序中可以得到基準值。這些值對(XIN和YIN)是FCHXY、STIPXY、STIRX和STIRY,而對(XOU.YOU)則為FCHOXY、STORXY、STORX和STORY。
普通/參數(shù)/XPIN、YPIN、XRESP、YRESP!黑色PIX結構尺寸參數(shù)NDMPAR=32 !結構尺寸數(shù)參數(shù)NASPAR=10 !關連點數(shù)普通/骨架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調用狀態(tài)IEN=0 !矢量陣完成的指示字調用INPNCS !操作者輸入2、調用SRDBLX(LUNSRD、LUNCHR、LUNSKL ISTAT)!打開字符文件如果(ISTAT.GE.2)中止調用LOADSK(LUNSKL)!負載/骨架/以骨架數(shù)據(jù)調用LOADCH(LUNCHR、ICH、IL、IR、IB、ID、IU、NREC、IMIN、IMAX、MU)調用DIMPIX(XPIX、YPIX)!將測量的結果尺寸轉換成象素根據(jù)這一點,實際處理回路是從IXYSW開關置于“Y”狀態(tài)時開始。
IXYSW=2 !首先處理Y-骨架點5 ICS=1 !骨架點指示字
ICV=0 !骨架點開始ISTS=ICS !骨架點開始ICV=ISK(ICS,1) !第一骨架點25 繼續(xù)如果(ISK(ICS.3).NE.IXYSW)進入55!SKIP、錯誤的坐標系調用FCHIXY(ICV.X.Y)!取出*輸入*X.Y如果(1.EQ.IXYSW)調用GRXAJ(ICS,ICVX,XX.)!網(wǎng)格對準X如果(2.EQ.IXYSW)調用GRXAJ(ICS,ICVY.YY.) !網(wǎng)格對準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 繼續(xù)55.ICS-ICS+1ICV=ISK(ICS.1)如果(ICV.NE.O)送到25!骨架處理是否完成?IENS+ICS-1 ! 這一回路的骨架點數(shù)只要骨架點的處理完成,指數(shù)設定為正,使以后的所有基準值更加直截了當。在YPROC和XPROC中,在兩骨架點之間的輪廊線都被“展寬”或“壓縮”,才能產(chǎn)生平滑的比例合適的字符。
進行65LS=1 NUMS!將所有負的骨架點設定為正如果(ISK(LS.L).LT.O和ISK(LS,3).EQ.IXYSW)ISK(LS、1)=ISK(LS.1)*-165 繼續(xù)如果(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-骨架點實際上必須在網(wǎng)格線之間對準,應對X骨架表進行搜索,以得到X的最大值。用這個值來計算所有X值的偏差,就能使兩網(wǎng)格線之間的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 繼續(xù)送到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-對規(guī)定的點尺寸和(或)分類力下的字符的實際比例的確定,是依靠將“位一圖”確定比例來完成的,與其說利用“位一圖”確定比例來完成規(guī)定點尺寸和(或)分辨力下的字符的比例確定,還不如確定字符輪廊線的比例。也就是說,使用X和Y網(wǎng)格線之間的較大的增量來產(chǎn)生較低的分辨力和(或)較小的點尺寸。
為達到此目的,必須有一種控制網(wǎng)格增量(輸出器件的象素尺寸)的方法。應該指出,有兩種獨特的象素系統(tǒng)輸出器件的象素系統(tǒng)(亦即在Canon激光打印機LBP-CX型上的300個象素/英寸)和輸入數(shù)據(jù)的象素系統(tǒng)(亦即由Compugsaphic8600/8400型的排印機掃描用的1302個象素/英寸×1563個象素/英寸)。
因此,利用如下公式來確定網(wǎng)格的增量(輸出象素的結構尺寸),并作為數(shù)據(jù)單元的測量值(輸入象素)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普通/參數(shù)/XPIX、YPIX、XRESP、YRESP!黑色的象素結構尺寸參數(shù)NDMPAR=32 !結構尺寸數(shù)參數(shù)NASPAR=10 !關連點數(shù)普通/骨架/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-負載骨架數(shù)據(jù)數(shù)據(jù)直接加載到合適的骨架數(shù)據(jù)區(qū)上。
輸入LUN=邏輯單元數(shù)子程序 LDADSK(LUN)參數(shù)NDMPAR=32 !結構尺寸數(shù)參數(shù)NASPAR=10 !關連點數(shù)普通/骨架/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 !骨架計數(shù)輸入讀出(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分類的的坐標處理就可作為字符輪廓線的加載。相對標題數(shù)據(jù)也從該程序返回。
輸入LUN=邏輯單元輸出ICH-字符數(shù)IL-輸入單元的左側邊界IR-輸入單元的右側邊界IB-字符基線-當它是常量時(對1536Campugsaphic8600/8400型數(shù)據(jù)),可能不是有意義的。
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 !初始坐標計數(shù)器IPNLAS=O !筆的最后值(Y分類賦值)讀出(LUN.12,END=500)ICH、IL、IRIB、ID、IU、NREC、IMIN、IMAX、NUM、12 格式(1016)每一個坐標(IX、IY)是按照它的順序數(shù)(NU)和他的Y分類(IPEN)從磁盤讀出。IPEN代表坐標處在那一個Y-分類(1-10)上。但是,當用它表示一個新的回路開始時,IPEN值則為0。(當骨架數(shù)據(jù)中的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 !坐標數(shù)NUMO=ICXIN(IMEM)XIN(IC)YIN(IMEM)=YIN(IC)進行700 j=1、256XOU(J)=O !輸出起始陣700、YOU(J)=O返回操作結束5、5 LPSCAL、FTN-在Y分類之內的字符調整如上所述,每一個字符在文本整個一行內的一個水平“區(qū)段”或一組“區(qū)段”內必須垂直對準。這些“區(qū)段”就是指Y一分類。每一個Y分類是限定在一對離散的Y值的頂點和底部點,由于它對所有字符具有特殊的重要性,故必須將它平穩(wěn)地落在象素的邊界上(網(wǎng)格線上)。其用意是能夠對字符輪廓線的任何一部份進行垂直控制,它的位置(相對于這些Y值的位置)將影響文本字符之間的光學對準。最主要的Y-線段,如基線、頂尖部份的高度、底部水平線等,一般都要求確立這些Y-值。對位于它們“之間”的輪廓線進行補償和確定比例,就可使所規(guī)定的Y-值與網(wǎng)格對準。
有必要將限定某個輪廓線的全部坐標在實際使用時都置定在兩個一值間的Y一分類之內。通常在輪廓線中有一小段將被排擠在給定的Y-分類之外。但是,為了保證輪廓線平滑美觀,被排擠出來的這一小段輪廓線也采用在Y一分類之內的那一段輪廓線相同的方法處理。
用下述程序來處理輪廓線上的一組坐標值。在每次調用中,新點(X、Y)根據(jù)其Y分類(IC)來確定偏差和比例,其Y-分類則由兩個Y值ICLS(IC、1)和ICCAS(IC、2)所定義。因為輪廓線上其他后續(xù)點都要落在同一個Y一分類之內,而且只偶然出現(xiàn)變化,所以只有當輪廓線從最后的Y分類(ICLAST)進入到最新的((IC)時才需要計算偏差和比例值。
輸入IC=最新的Y分類數(shù)X、Y-信號坐標集ICLAST-最后的Y分類數(shù)輸出ICLAST-更新的Y分類數(shù)X、Y-新坐標位置子程序LPSCAL(IC、X、Y、ICLAST)
參數(shù)NDMPAR=32!結構尺寸數(shù)參數(shù)NASPAR=10!關連點數(shù)普通/骨架/NLOOP、LPEND(20)、NCLAS、ICLS(10、2)NUMS、ISK(265、NASPAR)OIXCIM(NDMPAR)、IYDIM(NDMPAR)、NANGISK1T(128、3)普通/斜體/ANGIT、GLANGT普通/參數(shù)/XPIX、YPIX!黑色象素結構尺寸注采用斜體字字形時,應考慮劃線角度保持一致,字體在進行務何能改變Y坐標的處理之前必須完成“非斜體化”。
如果(ANGIT、NE、O)調用非斜體(X、Y)!斜體的正體化注如果Y分類偏差和比例因子已經(jīng)計算出最新的Y分類,則跳過。
如果為(IC、EQ、ICLAST)則過到100。
為計算將Y值、(ICLAS(IC、2))值與網(wǎng)格對準時所需用的偏差和比例因子,我們必須準確地算出它和基線(在8600/8400數(shù)據(jù)中為常數(shù)1536)的偏差,才能使其與象素邊界線平穩(wěn)地對準。在這種方法中,首先必須準確測出Y分類高出基線的高度。其次應決定距Y分類所確定的Y值最近的那些網(wǎng)格線。最后要計算擴展上述兩根網(wǎng)格線之間的字符輪廓線所用的比例因子。
IORIGN=1356/XPIX+5!測量距全部YCLASS的ORIGINORIGIN=IORIGN*YPIX-1536YBLINE-ICLS(IC、I)+ORIGIN!+使15263到BLPIX的偏差IBLINE=YBLINE/YPIY+5!將底部線調到與網(wǎng)格最近的地方BLINE=IBLINE+YPIXYCLINE=ICLS(IC、2)+ORIGIN!+底部線的偏差ICLINE=YLINE/YPIX+5!將頂部線調到與網(wǎng)格最近的地方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-處理時的斜體的非斜體化有恒定的音節(jié),又因為斜體字的豎直詞干并不完全是垂直的,因此,在進行任何Y-處理之前,對每個字符進行非斜體化是必要的,如果這樣做不成功,就應對字符內的主要傾斜角進行非控制調整。從而詞干的一側可能扭向某個方向上,而岡一個詞干的身一側可能扭向另外一個方向,得出一個錐形詞干。
當字符進行非斜體化時,它的詞干變成近似于垂直。調整如此的垂直詞干的Y-值,對它的角度不產(chǎn)生影響。當完成全部Y-調整時,字符的斜體化如ITALIC.FTN所描述的那樣。
下面的程序用于一對坐標的非斜體化。這種方法在技術上是將Y-值與斜體角的正切之積加到每個X-值上,來實現(xiàn)數(shù)據(jù)的“非扭過程”。
輸入X.Y=描述單個輪廓點的一對坐標值子程序UNITAL(X.Y)參數(shù)NDMPAR=32 !結構尺寸數(shù)參數(shù)NASPAR=10 !關連點數(shù)目普通/滑架/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-可控制的結構尺寸轉換為象素。
正象對輸入數(shù)據(jù)定義的那樣,企圖用不同的方法將點立起來的X或Y的結構尺寸轉換為適當數(shù)目的象素,以表示輸出數(shù)據(jù)內的結構尺寸。方法似乎依賴于器件,在這種意義上也許使處理有所差別。各種方法取決于這類輸出器件的性能,如分辨力、“點陣卷縮”、器件形成單一點陣的能力等等。下面的程序用在LBP-CX型CANON激光打印機是很好的,在光柵顯示屏上產(chǎn)生好的結果。
因為垂直和水平的字符結構尺寸僅可能由離散的象素表示,所以,根本的方法是規(guī)定的尺寸(或X或Y)除以象素尺寸(象在INPNCS、FIN計算那樣),并輸入到最靠近的全部象素。其結果是存儲在IXDM(NDMPAR)和IYDIM(NDMPAR)的結構尺寸由計算出最能代表它們的象素數(shù)目所代替。附加考慮條件見下文。
XPIX=X-象素結構尺寸YPIX=Y-象素結構尺寸(注X和Y象素結構尺寸不需要相同)子程序DIMPIX(XPIX、YPIX)參數(shù)NDMPAR=32 !結構尺寸數(shù)參數(shù)NASPAR=10 !關連點數(shù)普通/骨架/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象素是很容易被發(fā)現(xiàn)的,允許保持不舍入的結構尺寸是需要的。由于缺少足夠的分辨率,故潛伏著非對準引起的字符輪廓線的某些衰減或降低。
如果(IYDIMJ、NE、1)IYDIM(J)=IDYMJ如果(IYDIMJ、EQ、1)IYDIM(J)=-IYDIM在上述關系式之后,如果任何結構尺寸都保持0,對于一個象素,它是“能實現(xiàn)的”。
如(IYDIM(J)、EQ、O)IYDIM=1100 繼續(xù)返回操作結束5、8GRYAJ、FTN/GRXAJ、FTN-Y/X骨架點的網(wǎng)格對準Y和X骨架點的處理是相等的。雖然這里只以Y作為參數(shù),但所提出的程序對X和Y兩者都適用。
骨架點的樹形結構保證每個骨架點最后送到這個程序。在這個程序中,要確定這個點是否與網(wǎng)格對準。為了與網(wǎng)格對準,要對網(wǎng)格對準(結非網(wǎng)格對準)影響進行補償。當然,為了與網(wǎng)格對準,一個點是有偏差的。這種補償也應對所有其他的關連點進行。然后才能將這些關連點與網(wǎng)格對準,同樣,它們的單個補償也應對各自的有關骨架點進行。輸入ICSKL-ISK陣中的目前的指數(shù)(骨架點)IC-輸入輪廓線和輸出輪廓線陣(輪廓坐標)內的指數(shù)Y或X=在網(wǎng)格對準之前Y-或X-值輸出Y或X=在網(wǎng)格對準后的新Y-或X-值DY或DX=補償值(入端得到的Y值減去出端的Y值)子程序GRYAJ(ICSKEL,IC,Y,DY)普通/參數(shù)/XPIX,YPIX !變黑象素尺寸YY=Y!SAEOLDY調用FCHDXY(IC、XDUR、YOUR)取出前一次的補償當一個點是不被網(wǎng)格對準(對準特征標志)時,為了指示,必須做出一些驗證。正象在DIMPIX、FTN里所描述的那樣,保證斜體角,對角線和1/2到1-1/2象素“消失”的一致性是需要的。當指數(shù)(IC)大于0時,利用輪廓線陣內的骨架點指數(shù)的符號就表明已對準當指數(shù)(IC)小于零時,表明為非對準。(注意當用IC的絕對值作指數(shù)時,必須小心)。
如果(IC、LT、O則送到100)在處理某一個點之前。應檢查一下看是否已經(jīng)提供了前一次的關連點-線骨架點來補償目前的點(指數(shù)=絕對值(IC)),95Y=YY+YOUR !包括以前的調整依靠前一次的關連點-或骨架點得到相應的任一補償之后,通過將Y值舍入到最靠近象素邊界(如果合適),可使目前的點與網(wǎng)格對準(YOUR)加到Y值上,再除以Y-象素結構尺寸(YDIX),再加5,并進行舍項就可完成。將所得的象素(IY)數(shù)乘以象素結構尺寸(YDIX)從而得到網(wǎng)格對準值。為產(chǎn)生網(wǎng)格對準(DY)的實際補償和新的網(wǎng)格對準值(Y)按照程序返回。
IY=Y/YPI)+5!調到靠近的象素上Y=IY*YPIXDY=Y-YY !目前通過的調量100繼續(xù)在由直接相關的兩個連在一起的骨架點中,至少有一個必須和網(wǎng)格對準。否則,出現(xiàn)不可預料的結果。因此,如果標記出非對準,那么對現(xiàn)在骨架點中的全部關連點必須進行檢驗,從而找出任一類似的非對準條件。
如果找到一個或幾個條件,那么目前的對準標記是最優(yōu)先的,那么該點,則是對準了的,而剩下的關連點(對目前而言)被標記為“非-對準”。其目的是,在樹的已知“分技”中,如果找到一系列非-對準關連點,則只有“分技”的尾端實際將是非-對準的。
調用ASYSRC(ICSKEL、ISTAT)!檢查其他非-對準的分技如果(ISTAT.EQ.1)進行到95 !ISAT=1=目前的對準點Y=Y+YOUR !非對準-關連點的保存DY=YOUR返回操作結束5、9ASXSRC.FTN/ASYSRC.FTN當一個骨架點(指數(shù)=ICSKEL)標記為非對準時,要完成一次檢驗,看一看它的關連點誰也沒有被標記為非網(wǎng)格對準。這個條件可以以兩種方式存在第一,以結構尺寸表示尺寸作為標記值。在本程序中,對這兩種方式都要檢驗,當發(fā)現(xiàn)有時,數(shù)值1表示返回到ISTAT。如果不出現(xiàn)這種條件,O被返回。
輸入ICSKEL-進入骨架點陣的指數(shù)輸出ISTAT-在完成狀態(tài)1=在這個分技內,有非對準點
O=在這一級上,沒有非對準點子程序ASXSRC(ICSKEL,ISTAT)參數(shù)N-DMPAR=32 !結構尺寸數(shù)參數(shù)NASPAR=10 !關連點數(shù)目普通/骨架/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 !發(fā)現(xiàn)1進行75K=ICSKEL,NUMS !查看骨架指示符號如果(IABS(ISK(K、1)).EQ.INDEX)送到8575 繼續(xù)85 如果(ISK(K、1)LT.O)送到300 !發(fā)現(xiàn)負骨架點100 繼續(xù)返回操作300 ISTAT=1返回操作結束5、10 ASSOCY·FTN/ASSOCX·FTN-利用關連保持字符結構尺寸一個骨架點可以有從0到7個關連的骨架點,關連骨架點的最后生標位置取決于該骨架點的坐標位置。在網(wǎng)格對準過程中,如果骨架點偏到左邊,與則它對應的關連骨架點在網(wǎng)格對準之前同樣偏到左邊。另外如果關連點通過可控制的結構尺寸與骨架點連接,則關連點的最后坐標位置取決于骨架點的坐標位置可控制的結構尺寸。
當一個骨架點(指數(shù)=ISK(ICS、1))與一些點(ISK(ICS、LK+3))關連時,每一個的指數(shù)分別轉到其有新坐標位置(Y)和新坐標位置與原來位置之差(DY)的這種程序(ASSOCY、FTN)上。
輸入ICS-骨架點陣列中的指數(shù)LK-確定關連點的指示字Y-關連點-或骨架點的新位置DY-以GRYAT.FTN計算的老Y值到新Y值之偏差子程序 ASSOCY(ICS、LK、Y、DY)普通/系數(shù)/XPIX、YPIX、XESP、YRESP !黑色象素結構尺寸參數(shù) NDMPAR=32 !結構尺寸數(shù)參數(shù) NASPAR=10 !關連點數(shù)普通
/骨架/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 !控制消失的象素變量本方法把關連點的指數(shù)和控制結構尺寸的指數(shù)組合成一個字(ISK(ICS,LK+3))。因此,首先需要提取兩個信息。
NDIM=(ISK(ICS,LK+3))/1000INDEX=(ISK(ICS,LK+3))-NDIM*1000!去掉結構尺寸表征碼調用FCHIXY(INDEX、XI、YI !提取關連點坐標。
結構尺寸指數(shù)并不總是規(guī)定的,而且可以得到零結構尺寸。因此,輸出象素的表達式直接根據(jù)輸入輪廓線數(shù)據(jù)計算,也就是說,在適當補償之后,由網(wǎng)格對準完成。
如果(NDIM.LE.O)送到1000 !零可控制的結構尺寸正如在DIMPIX.FTN中所表示的那樣,一些結構尺寸處在1/2和1-1/2象素之間,并由非-網(wǎng)格對準輪廓線給出最佳表示。在DIMPIX中,這種條件由負可控制的結構尺寸標記,而可控制的結構尺寸并不舍入到最靠近的象素邊界。在這種狀態(tài)下,關連點(YNEW)放在隔骨架點指定的距離(IABS(IYDIM(NDIM))上。然后,查找與這個關連點的余項表,以得到該骨架點的參考值,當查到時,它的指數(shù)標記為“負數(shù)”,以表示非網(wǎng)格對準。當在GRYAJ.FTN中處理關連點時,這就表示網(wǎng)格已對準。
如果(IYDIM(NDIM).LT.O)送到3000 !網(wǎng)格末對準在大多數(shù)情況下,處理全部集中在這樣一種點上,在該點上的關連點與骨架點間的距離為規(guī)定的象素數(shù)目,正如規(guī)定的結構尺寸(IYDIM(NDIM))所示。象元離散數(shù)目這個技術條件保證了關連點的網(wǎng)格對準。
100 YNEW=Y+(IYDIM(NDIM)*YPIX*SIGN(1.,(YI-(Y-DY))))然而,如果有足夠的分辨率來表示YPIXVR偏離可控制的結構尺寸(IYDIM(NDIM)的變化,那么在GRYAJ·FTN處理時,可對關連點進行簡單的補償,并允許移動到最靠近的網(wǎng)格線上。這就稱之為1-1/4象素消失。
700 如果(ABS(YNEW-(YI+DY)·GE·YPIXVR)送到1000710 YO-YNEW-YI !計算對準偏差調用STORY(INDEX、YO) !存儲最后的對準偏差返回操作如果限制非控制的結構尺寸(零結構尺寸),同時實際輪廓線的結構尺寸是在1/2象素到1個象素之間,因此可以說它的結構尺寸“控制”在1個象素(IYDIM(NDMPAR)上。這就有助于防止處在低點尺寸和分辨力的字符部分消失。
1000繼續(xù)如果(ABS(Y-DY-YI).LT.YPIX和ABS(Y-DY-YI)·GE·YPIX/2.)送到1010調用STORY(INDEX.DY)!假定落到靠近的網(wǎng)格返回操作200 NDIM=NDMPAR送到100 !最小結構尺寸控制=1象素3000調用INDSRC(INDEX、ICS)!查找指數(shù)YNEM=Y+IABS(IYDIM(NDIM))*SICN(1.,(YI-(Y-DY)))!調用新的非對準的邏輯送到710結束5、11 INDSRC.FTN-持定骨架基準的查找在ASSOCY.FTN或ASSOCX.FTN中,如果規(guī)定的骨架點不是網(wǎng)格對準的,在骨架表中(ISK(N.1)它的基準值必須記上“非-對準”標志。也就是說,它的基準值必須為負集。
子程序 1NDSRC(指數(shù),ICS)參數(shù) NDMPAR=32 !結構尺寸數(shù)參數(shù) NASPAR=10 !關連點數(shù)普通/骨架/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(指數(shù))送到200100繼續(xù)寫入(5,*)′INDSRC-對于查找匹配指數(shù)失敗返回操作200 ISK(J·1)=IABS(ISK(j、X1))*-1返回操作結束5、12 YPROC·FTN/XPOC·FTN-在骨架點之間的處理在這一點上處理中,輸入輪廓線陣(XIN、YIN)包括只對斜體扭變和成比例的Y分類進行調整的數(shù)據(jù)。但是,并末直接對無骨架點進行修改。所有網(wǎng)格一對準補償均存儲在輸出輪廓線陣(XOU、YOU)中,在最后處理時,目前只使用原始輪廓線進行操作。因為要確定每個骨架點的正確位置,所以必須補償骨架點之間的輪廓線段,而實際建立的網(wǎng)格對準輪廓線要適當?shù)卮_定比例。根據(jù)LPEND(20)對回路的定義來分別處理每個輪廓線回路。
輸入ISTS=骨架點陣啟動的指示字IENS=骨架點陣結束的指示字子程序YPROC(ISTS、IENS)整數(shù)ISBUT(256)普通/參數(shù)/XPIX、YPIX、XPESP !黑色的固定結構尺寸參數(shù)NDMPAR=32!結構尺寸數(shù)參數(shù)NASPAR=10!關連點數(shù)普通/斜體/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!每個回路的處理在這個回路上索找全部骨架點。當發(fā)現(xiàn)骨架點時,把它們存儲在ISBUF陣里,存儲在陣里的骨架點回繞字符輪廓線按順序分類。存儲的這些點從輸入輪廓線陣(IXIN、YIN)移到輸出輪廓線陣(XOU、YOU)。
IK=0!計下這個回路內骨架點數(shù)目至500TM-ISTS、IENS!Y-搜索這個回路內的骨架點如果((ISK(JM、3)、NE、2)或(ISK(JM、1)、GT、IENV)或(ISK(JM、1)LT、ISTV))*送到550!Y骨架點的負載緩沖器IK-1+1 !發(fā)現(xiàn)1個ISBUF(IK)=ISK(1JM、1)500繼續(xù)如果(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繼續(xù)如果(ISW、EQ、O)送到600560繼續(xù)進行900JJ=1,IK!輸出和輸入的結合調用FCHIXY(ISBUT)JJO,XI、YI調用FCHOXY(ISBUF(JJ),XO、YO)
YO=YI+YOISBUT(IK)=ISBUF(1)!閉合骨架回路這個回路在收集所有骨架點之后,在ISBUF陣中有一對點送到YADJ、FTN。每一對點定義被補償?shù)暮痛_定比例的輪廓線一個線段。
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繼續(xù)1999 ISTV-IENV+1!下一個回路結束位置IENV-LPEND(LC+1)2000繼續(xù)返回操作3000寫入(5*)′誤差-在這個回路中僅有一個停泊ISTV、IENV返回操作結束5、13YADT、FTN/XADJ、FTN-線段的比例這個程序處理的單個線段,該線段由兩個新點(IBEG、IEND)定義,線段處在單個字符輪廓線回路上,回路則由該回路起點和終點所定義(ISTAV、IENDV)。這個處理包括(1)線段比例因子的計算,這是根據(jù)原線段的兩個端點(XIN1、YIN1和XIN1和XIN2,YIN2)和網(wǎng)格對準(XOV1、YOU1)之后的新端點標出的,(2)原線段的起點(XIN1、YIN1)補償?shù)挠嬎?,以便和新線段的起點(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繼續(xù)如果(IEND、GF、IBEG)返回操作因為線段可以跨越閉合回路的兩端,這樣為處理回路端線段做好了準備,然后從回路起點到線段終點要做另外處理。
進行200J=ISTAV、IEND-1!處理回路終點之外的線段調用FCHIXY(J、XP、YP)YP=(((YP=YIN1)+YFAK)+YSHF)+YIN1調用STORY(J、YP)200繼續(xù)返回操作結束5、14 ITALIC、FTN-Y-處理后的斜體化本程序的目的是在這個只不過進行Y-處理的點上取消UNITALFTN的影響。由于字符“扭變”,假如根據(jù)Y值新部位而重新假設的新位置的X值,可以重新引入一個斜體角。新的效應是當在斜體角上實現(xiàn)了全部Y調整值,因此,不僅產(chǎn)生新的Y-值,而且也產(chǎn)生了新的X值。
應注意兩個點。由于有兩個輪廓線陣(XIN、YIN和XOU YOU),并且由于Y-調整值被轉換到XOU、YO陣,而X-調不是用在UNITAL、FTN中的斜體角(ANGTT),而是字形斜體角(GLANGT)。
子程序體角參數(shù)NDMPAR=32!結構尺寸數(shù)參數(shù)NASPAR=10!關連點數(shù)普通/骨架/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-字符數(shù)ILSB-原始的左側邊界IRSB-原始的右側邊界IOFF-保留值IDDD-保留值IUNTT-單元值NRFC-原始字符寬度IMIN-保留值IMAX-保留值HAFPIX-加到全部X-坐標上的X值,以使X-骨架點在網(wǎng)格線之間擬合。
子程序NCSBLO(LUN、ICHAR、ILSB、IRSB、IOFF、IDDD、IUNIT、NREC、IMIN、IMAX、HAFPIX)普通/字符輸出/NUMO、XOU(256),YOU(256)!黑色輸出普通/參數(shù)/XPIX、YPIX、XRFSP、YRESP !黑色象素尺寸參數(shù)NDMPAR=32 !結構尺寸數(shù)參數(shù)NASPAR=10 !關連點數(shù)普通/骨架/NLOOP、LPENP(20、NCLAS、ICLS(10、2)
NUMS,ISK(256),NASSPAR),+IXDIM(NDMPAR),IYDIM(NDMPAR),NANG,ISKIT(128、3)普通/骨架/ANGIT、GLANGT因為字符寬度因網(wǎng)格對準而有所改變,所以必須計算新的邊界,以便使整個字符寬度(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繼續(xù)IXMAX=XMAXT !調整右邊界和左邊界寬度IXMIN=IXMAX-IXMIN+1NDIE-NWIDTH-HRECIXMAX=ILSB+NREC+IRSBILSB=ILSB-NDIF/2 !新的左邊邊界IRSB=IXMAX-NWIDTH-ILSB !新的右邊邊界
NREC=NWIDTH !新的寬度最后步驟是對X值進行補償,補償量是使網(wǎng)格對準后的骨架點精確地處在網(wǎng)格線之間(HAFPIX)所要求的量。
進行1000 J=1,LPEND(NLOOP)1000 XOU(J)=XOU(J)+HAFPIX返回操作結束5、16取樣數(shù)據(jù)下面是用于處理OGTIMES、T/F2500、字符0003所需要的文件表。
5、170003.LOP-閉合回路8400矢量輪廓線記錄1標題字段1-字符數(shù)字段2-左邊邊界字符3-右邊邊界字段4-基線字段5-保留值字段6-單元值字段7-寬度字段8-Y-最小值字段9-Y-最大值字段10-向量端點=N的數(shù)目記錄2坐標字段1-點數(shù)字段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-骨架數(shù)據(jù)記錄1-4每個9個字段-包括X-結構尺寸字段1-記錄的結構尺寸數(shù)字段2~9-結構尺寸記錄5-8相同的Y-結構尺寸記錄9閉合回路的定義值字段1-回路數(shù)目字段2-回路中最后坐標數(shù)字段3-如果存在,則相同記錄10Y-分類定義值字段1-Y-分類數(shù)字段2-Y分類底部字段3-Y分類頂部字段4,5-如果存在,與2,3相同記錄11斜體角字段1-角*100字段2-保留值記錄12-N+12骨架點為N的骨架點數(shù)據(jù)字段1-0003.LOP文件的骨架點指數(shù)字段2-關連點數(shù)目字段3-X-骨架點或Y-骨架點定義字段4-10-結構尺寸表的關連點/指數(shù)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利用上述輸入數(shù)據(jù)的FORTAN程序的前一個集將產(chǎn)生一個已填好的比例合適而且已與網(wǎng)格對準的字符。
從上面描述的發(fā)明方法的特殊應用中,可以看出,這種方法有多種應用,即產(chǎn)生比例合適的字形或字符數(shù)據(jù),利用這些數(shù)據(jù)可以得到任一分辨力和任一點尺寸上的位-圖字型數(shù)據(jù)。
另外,這種方法能夠產(chǎn)生網(wǎng)格對準的輪廓線,并輸送到輪廓線驅動裝置,如筆式圖形顯示器和數(shù)字控制的機器。
本發(fā)明的方法可和數(shù)據(jù)庫一起使用,數(shù)據(jù)庫存有表示限定點的字符輪廓坐標數(shù)據(jù)。坐標可以用極坐標或笛卡爾坐標表示,并可以存儲在非壓縮數(shù)據(jù)庫里,或存儲在壓縮形式的數(shù)據(jù)庫里,壓縮形式可以是當前流行的任何一種數(shù)據(jù)壓縮形式。因此,在這里所用的,壓縮“坐標典型”的數(shù)據(jù)包括兩種坐標數(shù)據(jù)庫表示方法,并壓縮形式或非壓縮形式存儲。
權利要求
1.由輸入數(shù)據(jù)庫產(chǎn)生比例適合的字符數(shù)據(jù)庫的一種方法,這個輸入數(shù)據(jù)庫容納有字符輪廓線上幾個點的坐標數(shù)據(jù),所述的方法包括如下步驟1)把字符輪廓線分成若干可選擇線段,每個線段位于字符輪廓線上的一對點之間,所說的一對字符輪廓線點構成第一骨架點和第二骨架點;2)移動每個線段上的全部坐標,從而使相應的第一骨架點與輸出網(wǎng)格對準;3)利用比例因子將每個線段求其線性比例,使相應的第二應架點與輸出網(wǎng)格對準。
2.由權利要求
1的方法產(chǎn)生比例合適的字符數(shù)據(jù)庫。
3.權利要求
1的方法還包括如下步驟1)至少選擇一個骨架點,對它建立起一個或多個關連骨架點;2)至少對一個選擇的關連骨架點建立起另外一個或多個關連骨架點;3)至少移動某些上述關連點和另一些關連骨架點,使之與輸出網(wǎng)格對準。
4.由權利要求
3的方法產(chǎn)生比例合適的字符數(shù)據(jù)庫。
5.權利要求
1的方法還包括如下步驟1)至少對一個所選擇的骨架點建立一個或多個關連骨架點;2)至少對所選擇的一個關連骨架點建立另一個或多個關連骨雜點;3)至少移動某些上述關連點和另外一些關連骨架點,使這些點處于特殊的非對準位置,以與輸出網(wǎng)格對準。
6.按權利要求
5的方法產(chǎn)生比例合適的字符數(shù)據(jù)庫。
7.權利要求
1的方法還包括如下步驟1)至少對一個所選的骨架點建立一個或多個關連骨架點;2)至少對一個所選的關連骨架點建立另外一個或多個關連骨架點;3)至少移動某些上述關連點和另外一些關連骨架點至預先確定的位置,這是為了控制與至少對應于一個所選擇的骨架點的相對位置。
8.由權利要求
7的方法產(chǎn)生比例合適的字符數(shù)據(jù)庫。
9.在權利要求
7的方法里所說的關連點和另外一些關連骨架點,按上述預定程序內的預定距離移動,這是為了控制規(guī)定的字符結構尺寸。
10.在權利要求
7的方法里所說的關連和另外一些關連骨架點移動的預定程序是樹形結構。
11.在權利要求
7的方法里,第3步被省略了,當輸出網(wǎng)格有足夠高的分辨力時,就能精確地顯示在設計字符時的任意距離內的變化。
12.權利要求
1還包括如下步驟1)建立(a)至少對兩個所選的骨架點有一個或多個關連骨架點,(b)對上述某些所選的關連骨架點有另外一個或多個關連骨架點,從而至少構成兩個類似干樹形骨架點數(shù)據(jù)結構;2)至少移動上述某些關連點和另外一些關連骨架點,使這些點處在相對輸出網(wǎng)格而言是一些特殊的非對準位置上;3)至少移動一些上述關連點和另外一些關連骨架點,這些點與輸出網(wǎng)格對準;4)建立一個附加點、這個點與上述樹形數(shù)據(jù)結構相關連,而當兩個樹形數(shù)據(jù)結構在同一個字符點上收斂時,就可避免兩個樹形數(shù)據(jù)結構之間的矛盾。
13.從輸入數(shù)據(jù)庫得到比例合適的字符數(shù)據(jù)庫的方法,輸入數(shù)據(jù)庫內有表示字符輪廓線上幾個點的X和Y的坐標數(shù)據(jù),上述方法包括下列步驟1)把字符輪廓線分成若干線段,每個線段位于字符輪廓線上一對點之間,上述一對字符輪廓點建立第一骨架點和第二骨架點;2)移動每個線段內的全部坐標,從而使相應第一骨架點與輸入網(wǎng)格對準;3)從比例因子確定每個線段的線性比例使相應的第二骨架點與輸出網(wǎng)格對準。
14.在權利要求
12的方法里,字符輪廓線線段分配到規(guī)定的Y軸區(qū)段上,并移動在已知的Y軸區(qū)段內的所有線段,按與步驟(2)和(3)同樣的方法進行移動和確定比例。
15.由權利要求
13的程序產(chǎn)生比例合適的字符數(shù)據(jù)庫。
16.從輸入數(shù)據(jù)庫得到比例合適的字符數(shù)據(jù)庫的一種方法,輸入數(shù)據(jù)庫內有表示字符輪廓線上的幾個點的坐標數(shù)據(jù),上述方法包括如下步驟1)把字符輪廓線分成若干可選擇的線段,每個線段處在字符輪廓線上一對點之間,所說的一對字符輪廓線上的點建立了第一骨架點和第二骨架點;2)為了使相應的第一骨架點與網(wǎng)格對準,要移動每個線段上的全部坐標;3)按比例因子取每個線段的線性比例,但不包括字符對角線的線段,使相應的第二骨架點與網(wǎng)格對準;4)按比例因子為1,取字符對角線線段的比例,故相應的第二骨架點和它所對應的第一骨架點之間,仍然保持它原有關系。
17.由權利要求
15的方法產(chǎn)生比例合適的字符數(shù)據(jù)庫。
專利摘要
本發(fā)明公開一種能夠產(chǎn)生比例合適的輪廓線數(shù)據(jù)的方法,這種方法可以提供(1)具有不同分辨力和任何點尺寸的位一圖字形數(shù)據(jù);(2)具有網(wǎng)格對準的輪廓線,以便輸送到輪廓線驅動裝置內(例如筆式圖形顯示器和數(shù)字控制的機器)。這種方法可將字符的輪廓線“展寬”和“壓縮”,使輪廓線上某些特定的點(骨架點)和“位-圖網(wǎng)格”適當?shù)貙?。這種方法的數(shù)學基礎是如下三種中的一種(1)將字符的輪廓線截成許多小段(在一對骨架點之間截取);(2)在所截線段上全部填補上座標,使第一骨架點和上述網(wǎng)格對準;(3)按比例因子對所截線段取線性比值,使第二骨架點和網(wǎng)格對準。
文檔編號G06K9/48GK85104927SQ85104927
公開日1987年1月7日 申請日期1985年6月28日
發(fā)明者托馬斯·B·霍金斯 申請人:電腦圖像公司導出引文BiBTeX, EndNote, RefMan