專利名稱:可縮放筆劃字體的系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明大體上涉及可縮放筆劃字體,更具體地,涉及一種用于在移動計算設(shè)備(“移動設(shè)備”)上創(chuàng)建可縮放筆劃字體數(shù)據(jù)和存儲可縮放筆劃字體數(shù)據(jù)的系統(tǒng)和方法。
背景技術(shù):
如字體數(shù)據(jù)等文本數(shù)據(jù)典型地存儲在移動設(shè)備的存儲器中。因為移動設(shè)備典型地具有相對有限的存儲器和處理資源,存儲在移動設(shè)備上的文本數(shù)據(jù)量以及移動設(shè)備的文本再現(xiàn)能力通常受到限制。
存在三種基本的字體類型位圖、輪廓(profile)和筆劃。將位圖字體存儲為字符的圖形圖像,將每種磅值的字樣存儲為單獨的字體。將每個字符存儲為象素陣列(位圖)。位圖字體需要相對較大的存儲空間,并且相對難以進行縮放或?qū)Υ祟愖煮w應(yīng)用效果。
根據(jù)與字形的形狀或輪廓有關(guān)的信息,產(chǎn)生輪廓字體,如TrueTypeTM字體。將輪廓定義為一組直線和曲線。輪廓字體比位圖字體更好地便于縮放和其他效果,并需要比位圖字體少的存儲空間。但是,許多移動設(shè)備典型地都不具有足以有利于輪廓字體的使用的存儲空間和處理要求。
筆劃字體是其中以筆劃表示如字形所示的字符的形狀的字體。典型地,以直線和曲線來定義筆劃。典型地,針對給定字形集合的筆劃字體數(shù)據(jù)所需的存儲空間比相應(yīng)的輪廓字體數(shù)據(jù)所需的存儲空間小得多。但是,與輪廓字體相比,筆劃字體典型地產(chǎn)生具有受損質(zhì)量的字形。因此,再現(xiàn)基于筆劃的字體的現(xiàn)有再現(xiàn)引擎產(chǎn)生相當(dāng)有限質(zhì)量的字形。
發(fā)明內(nèi)容
因此,提出了一種從已存儲的字體數(shù)據(jù)再現(xiàn)文本的系統(tǒng),所述系統(tǒng)包括存儲在計算機可讀介質(zhì)中的字體數(shù)據(jù)結(jié)構(gòu),所述字體數(shù)據(jù)結(jié)構(gòu)包括多個字形的公共元素數(shù)據(jù)和惟一元素數(shù)據(jù);再現(xiàn)軟件模塊,存儲在計算機可讀介質(zhì)中并包括計算機可執(zhí)行指令,操作用于使計算設(shè)備訪問所述字體數(shù)據(jù)結(jié)構(gòu),并根據(jù)所訪問的公共元素數(shù)據(jù)和惟一元素數(shù)據(jù),顯示字形;以及移動設(shè)備,包括計算設(shè)備和存儲器,所述存儲器操作用于存儲所述字體結(jié)構(gòu)數(shù)據(jù)和所述再現(xiàn)軟件模塊,以及所述計算設(shè)備操作用于執(zhí)行所述再現(xiàn)軟件模塊計算機可執(zhí)行指令。
圖1是典型移動設(shè)備的方框圖;圖2是緊湊字體格式數(shù)據(jù)結(jié)構(gòu)的方框圖;圖3示出了公共元素在不同字形中的重復(fù)使用;圖4示出了公共元素的移位和縮放;圖5A是根據(jù)輪廓字體創(chuàng)建筆劃字體的方法的流程圖;圖5B是字形分析處理的更為詳細的流程圖;圖5C是典型的簡化處理的流程圖;圖5D是包含(containment)分析處理的更為詳細的流程圖;圖5E是典型的字形解析處理的流程圖;圖5F是字形解析處理的更為詳細的流程圖;圖6示出了非簡化形式和簡化形式的字形;圖7示出了具有內(nèi)輪廓和外輪廓的字形;
圖8示出了具有點的有效和非有效相鄰的字形;圖9示出了被解析為筆劃的字形;圖10示出了解析后的字形;圖11示出了幾個點的等待角;圖12是通過處理如圖10所示的典型字形而得到的典型日志;以及圖13示出了清楚連接的筆劃。
具體實施例方式
字體數(shù)據(jù)典型地存儲在計算設(shè)備上并用于將文本再現(xiàn)為字形。字體是特定字樣設(shè)計和大小的字符集。字樣是打印字符集的特定設(shè)計,如Courier、Helvetica或Times Roman。相關(guān)字符典型地包括腳本,如拉丁、希臘、平假名、片假名或漢字,其子集用于書寫特定的語言。
字形是用于表示字符的可視元素;字形是字符圖像的實際形狀。將如字體和樣式等文本表示方案應(yīng)用于字形。例如,字符“c”的斜體Times字體和字符“c”的粗體Times字體具有相應(yīng)的字形。
操作用于存儲用在再現(xiàn)文本中的文本數(shù)據(jù)的典型計算設(shè)備可以是個人計算機或移動通信設(shè)備。圖1是操作用于在顯示器102上顯示文本的典型移動設(shè)備100的方框圖。移動設(shè)備100包括應(yīng)用程序104,通常存儲在存儲器108中,其操作用于請求要在顯示器102上進行顯示的文本。再現(xiàn)引擎106操作用于接收來自應(yīng)用程序104的請求,并作為響應(yīng),從存儲器108中檢索文本的字體數(shù)據(jù),并將字體數(shù)據(jù)再現(xiàn)為顯示在顯示器102上的字形。
可以通過蜂窩電話、尋呼機、個人數(shù)字助理或其他移動計算設(shè)備來實現(xiàn)移動設(shè)備100。如果移動設(shè)備100包括通信電路和功能,則移動設(shè)備100典型地操作用于與無線網(wǎng)絡(luò)110進行通信。存儲器108操作用于以一種或多種格式存儲數(shù)據(jù),并可以包括數(shù)據(jù)庫、文件、ROM或RAM存儲器、網(wǎng)絡(luò)存儲空間甚或針對再現(xiàn)引擎的存儲存儲器,如閃速存儲器模塊等。顯示器102可以是CRT監(jiān)視器、LCD監(jiān)視器或其他類似的顯示設(shè)備。這種典型移動設(shè)備100之一可以是在題為“HAND-HELD ELECTRONICDEVICE WITH A KEYBOARD OPTIMIZED FOR USE WITH THE THUMBS”的美國專利No.6,278,442中所公開的類型,其全部公開在此一并作為參考。
可以將文本的字體數(shù)據(jù)存儲為由字符的“骨架”所定義的筆劃字體。所述骨架包括可能與其他字形共有的元素和對于特定字形是惟一的惟一元素。再現(xiàn)引擎106再現(xiàn)字符的骨架,以產(chǎn)生用于在顯示器102上進行顯示的字形。
圖2示出了可操作用于存儲典型字形的骨架的緊湊字體格式數(shù)據(jù)結(jié)構(gòu)200的方框圖??梢源鎯Χ鄠€數(shù)據(jù)結(jié)構(gòu)200,以表示相應(yīng)的多個字形??梢詫?shù)據(jù)結(jié)構(gòu)200存儲在移動設(shè)備100上的存儲器108中。
數(shù)據(jù)結(jié)構(gòu)200示意性地包括公共元素202和惟一元素212。每個公共元素202包括元素標(biāo)識符204、移位X值206、移位Y值208和縮放值210。公共元素標(biāo)識符204對應(yīng)于可以為兩個或多個字形所共有的元素。每個惟一元素212包括惟一元素標(biāo)識符214和元素描述216。惟一元素標(biāo)識符214是特定字形所特有的元素??梢酝ㄟ^公共元素202、惟一元素212或公共元素202和惟一元素212的組合來表示特定的字形。
元素數(shù)據(jù)庫250存儲由公共元素標(biāo)識符204所識別的公共元素202的描述數(shù)據(jù)218。描述數(shù)據(jù)218是X-Y坐標(biāo)系統(tǒng)中定義了元素的直線和曲線的點集。但是,也可以使用其他描述數(shù)據(jù)。
由圖2所示的示例數(shù)據(jù)結(jié)構(gòu)200所表示的特定字形包括由公共元素標(biāo)識符001、020和420所識別的公共元素202。但是,因為元素數(shù)據(jù)庫中的描述數(shù)據(jù)218只描述了公共元素202的形狀,典型地,根據(jù)具有該公共元素202的特定字形的需要,在X-Y坐標(biāo)系統(tǒng)中移位并縮放公共元素202。因此,移位X值206包括與公共元素202沿X-Y坐標(biāo)系統(tǒng)上的X軸的移位有關(guān)的數(shù)據(jù),以及移位Y值208包括與公共元素202沿X-Y坐標(biāo)系統(tǒng)上的Y軸的移位有關(guān)的數(shù)據(jù)??s放數(shù)據(jù)210包括與公共元素根據(jù)特定字形的縮放有關(guān)的數(shù)據(jù)。元素的縮放可以增加或減小元素212的大小。
惟一元素212是特定字形惟一的元素,并因而未被存儲在元素數(shù)據(jù)庫250中。每個惟一元素212由惟一元素標(biāo)識符214和描述數(shù)據(jù)216表示。描述數(shù)據(jù)是X-Y坐標(biāo)系統(tǒng)中定義了惟一元素的直線和曲線的點集。
在另一實施例中,可以將惟一元素212存儲在元素數(shù)據(jù)庫250中,并通過其相應(yīng)的惟一元素標(biāo)識符214來識別。因而,數(shù)據(jù)結(jié)構(gòu)200可以只存儲惟一元素212的惟一元素標(biāo)識符214。
再現(xiàn)引擎106響應(yīng)對特定字形的請求,訪問存儲在存儲器108中的相應(yīng)數(shù)據(jù)結(jié)構(gòu)200,并根據(jù)元素202和212構(gòu)造骨架。然后,再現(xiàn)引擎106將骨架用作用于再現(xiàn)的字體數(shù)據(jù),然后,在再現(xiàn)期間,應(yīng)用樣式、線寬和其他字樣特征。在另一實施例中,可以通過再現(xiàn)引擎106外部的另一應(yīng)用或處理來構(gòu)造基于元素202和212的骨架,然后,將其提供給再現(xiàn)引擎106。
如果在移動設(shè)備100處使用多種字體,則可以將分離的元素數(shù)據(jù)庫250存儲在存儲器108中。每個分離的數(shù)據(jù)庫250可以對應(yīng)于多種字體??蛇x地,可以將全部字體數(shù)據(jù)存儲在單一的數(shù)據(jù)庫250中。
圖3分別示出了公共元素302和306在中文日文韓文(“CJK”)象形文字304的不同字形和歐洲字形308的不同字形中的重復(fù)使用。在CJK象形文字304的不同字形中示出了公共元素302,以及在不同的歐洲字形308中示出了公共元素306。對于每種特定的字形,相應(yīng)地移位和縮放公共元素302和306。
圖4示出了用在三種韓文字形404、406、408中的公共元素402的移位和縮放。第一韓文字形404示出了未被移位或縮放的靜態(tài)形式的公共元素402。第二韓文字形406示出了向一側(cè)進行了移位的公共元素402。第三韓文字形408示出了放大到較大尺寸的公共元素402。
圖5A提供了根據(jù)源字體數(shù)據(jù)創(chuàng)建筆劃字體的方法的流程圖。在一個實施例中,源字體數(shù)據(jù)是輪廓字體數(shù)據(jù)。輪廓字體數(shù)據(jù)的一個示例是符合TrueTypeTM字體規(guī)范并存儲在TrueTypeTM字體文件“字形”表中的字體數(shù)據(jù)。也可以使用其他輪廓字體信息。
對于每種字形,執(zhí)行以下步驟字形分析2000、字形解析3000、中線提取4000、元素分析5000和轉(zhuǎn)換6000。典型地,在如服務(wù)器或個人計算機等用于準(zhǔn)備存儲在移動設(shè)備100上的字體數(shù)據(jù)結(jié)構(gòu)200和元素數(shù)據(jù)庫250的計算設(shè)備上執(zhí)行如圖5A所示的處理。例如,如圖5A所示的處理可以包括軟件應(yīng)用程序的典型結(jié)構(gòu)或使計算設(shè)備執(zhí)行所述處理的指令集??梢栽趩我坏挠嬎阍O(shè)備上實施所述處理,或者可以分布在幾個計算設(shè)備上,如通過計算機網(wǎng)絡(luò)進行通信的幾臺計算機。
圖5B提供了字形分析步驟2000的更為詳細的流程圖。在字形分析步驟2000中,收集與給定字形有關(guān)的信息,并簡化字形的形狀。字形分析步驟2000包括以下步驟字形簡化2100、輪廓線分析2200、包含分析2300和輪廓點分析2400。除非特別聲明,輪廓線表示特定字形的多邊形形狀,以及點表示頂點。字形可以包括單一輪廓線,如以下針對字母“I”的字形,或者可以包括多個輪廓線,如以下針對符號“Θ”的字形。
在字形簡化步驟期間,簡化給定字形的輪廓。在輪廓線分析2200步驟期間,將給定字形的輪廓線分類為內(nèi)和外輪廓線組。在包含分析步驟2300期間,對給定字形的輪廓線進行處理,以確定輪廓線的包含。在輪廓點分析2400步驟期間,收集與每個輪廓點有關(guān)的數(shù)據(jù)。此數(shù)據(jù)可以包括笛卡兒坐標(biāo)、所述點相對于其他點的角度、有效鄰點等。
圖6示出了非簡化形式600和字形簡化步驟2100之后的簡化形式602的字形的線形圖。如圖所示,字形600具有包括直線段和貝塞爾弧線的輪廓線612、614和616。在圓圈區(qū)域內(nèi)簡化字形600的輪廓線612、614和616,以便簡化隨后步驟中的處理。如果不需要或并不特別關(guān)心處理縮減,可以省略字形簡化步驟2100。
通過去除給定字形的形狀中的冗余點來實現(xiàn)簡化。圖5C示出了典型的簡化處理。簡化處理可以包括簇去除(cluster removal)處理2102、貝塞爾弧線階數(shù)縮減處理2104和多邊形簡化處理2106。也可以使用其他簡化處理。
在簇去除處理2102期間,通過去除點或線段,對其中點比較接近從而這些點不能定義輪廓線中的重要線段的點群(“簇”)進行簡化。典型地,這些是可以從字形定義中去除、同時引起給定字形的形狀的微小變形或不引起變形的相對較短線段或點。
對于線段去除,定義了冗余線段的最大長度和/或角度。最大長度和/或角度的特定數(shù)據(jù)可以是用戶定義的,或者根據(jù)簡化標(biāo)準(zhǔn)自動確定。典型地,較大的最大長度和/或角度導(dǎo)致額外的簡化,但也導(dǎo)致額外的可視變形。典型地,根據(jù)所要得到的字形字體的所需質(zhì)量來確定最大長度。
通過從字形的輪廓中去除一個或多個點來簡化或去除其長度和/或角度小于或等于特定值的直線段。可以通過遍及所有輪廓線的點的迭代,并確定由ni-ni+1頂點對所定義的每個線段的長度,并去除滿足長度和/或角度條件的線段來實施去除處理。重復(fù)處理每個輪廓線,直到去除線段數(shù)為零。針對字形輪廓的每個輪廓線,執(zhí)行此迭代處理。
在貝塞爾弧線階數(shù)縮減處理2104期間,對貝塞爾弧線進行簡化。貝塞爾弧線由2階(二次貝塞爾曲線)或3階(三次貝塞爾曲線)多項式所定義。二次貝塞爾弧線被定義為三個點的序列線上—線外—線上。三次貝塞爾弧線被定義為四個點的序列線上—線外—線外—線上?!半A數(shù)縮減”是將三次弧線縮減為圓錐弧線、從而將多項式的階數(shù)從3縮減為2的處理。階數(shù)縮減找出三次弧線的兩個線段的交點。例如,如果通過四個頂點來定義三次弧線ni、ni+1、ni+2、ni+3,則確定ni-ni+1和ni+2-ni+3線段的交點。然后,將此交點定義為弧線的新線外點,并進一步將弧線的定義限定為ni-新控制/線外點-ni+3,其中以單一點(新控制/線外點)來代替頂點ni+2和ni+3。保留弧線的起始和結(jié)束點,從而減少了輪廓線中不重要的點的數(shù)量。當(dāng)然,也可以使用其他弧線簡化例程。
在多邊形簡化處理2106期間,去除位于距離由其任意一側(cè)的兩個直接鄰點所定義的線特定距離的輪廓點。例如,當(dāng)平角和由所述點與兩個鄰點所定義的角度之間的差小于恒定值或“最大角度”時,去除所述點。最大角度可以是用戶定義的,或者根據(jù)所需的字形簡化量自動確定。
為了示例,給定三個頂點ni-1、ni、ni+1,并計算角度ni-1-ni-ni+1。當(dāng)此角度與平角之間的差小于最大角度時,則丟棄ni點。對于線外和線上點可以分別有兩個閾值。例如,如果三個點ni-1、ni、ni+1中的ni點在線上,則可以使用一個最大角度值s1;當(dāng)ni點在線外時,可以使用另一最大角度值s2。
在簡化之后,在輪廓線分析2200步驟期間,將給定字形的輪廓線分類為內(nèi)和外輪廓線組。圖7示出了具有內(nèi)輪廓線704和外輪廓線706的字形702的輪廓形狀700。內(nèi)輪廓線704示例地定義了外輪廓線706內(nèi)的限定空間。可以將這種形狀描述為具有“孔”的多邊形,其中外輪廓線706是多邊形的外邊界,而內(nèi)輪廓線704定義了多邊形內(nèi)部的“孔”。
根據(jù)TrueTypeTM轉(zhuǎn)換,定義內(nèi)和外輪廓線,從而按照相反的方向排序。例如,外輪廓線方向為順時針,則內(nèi)輪廓線方向為逆時針,反之亦然。為了確定輪廓線的方向,迭代遍及每個輪廓線的點,并根據(jù)多邊形面積公式,計算輪廓線的帶符號面積poly_area=0.5*[(V0.x*V1.y-V1.x*V0.y)+...
+(Vi.x*Vi+1.y-Vi+1.x*Vi.y)+...
+(Vn-1.x*Vn.y-Vn.x*Vn-1.y)]其中Vi是多邊形的頂點,n是多邊形中的頂點總數(shù)。所得到的數(shù)值poly_area是確定了輪廓線為順時針或逆時針的帶符號數(shù)值。正值對應(yīng)于逆時針方向,而負值對應(yīng)于順時針方向。如果面積為零,則通常未定義方向,并因而可以將其設(shè)置為缺省的順時針或逆時針方向。在一個實施例中,如果面積為零,將輪廓線定義為逆時針方向。
在分類之后,在包含分析步驟2300中,對給定字形的輪廓線進行處理,以確定包含。分析每個外輪廓線,以確定內(nèi)輪廓線是否被包含在其中。然后,相應(yīng)地對每個輪廓線進行分類。所述分類確定了每個字形的分離形狀,并從而可以將字形定義為分離形狀的集合。每個分離形狀包括一個或多個輪廓線,第一輪廓線是外輪廓線,而其他輪廓線是內(nèi)輪廓線。
可以通過獲取每個內(nèi)輪廓線并迭代遍及所述內(nèi)輪廓線的點的簡單強制算法來確定包含。也可以使用其他包含算法。在強制算法中,迭代并檢查每個內(nèi)輪廓線的每個點,以針對所有外輪廓線,確定其是否在外輪廓線的內(nèi)部。如果內(nèi)輪廓線的所有點都在一個外輪廓線的內(nèi)部,則該內(nèi)輪廓線完全被包含在所述外輪廓線中。在一個實施例中,將所述外輪廓線定義為包含輪廓線,而將所述內(nèi)輪廓線定義為被包含輪廓線。一旦對所有外和內(nèi)輪廓線進行了分類,則可以將給定的字形表示為分離形狀數(shù)據(jù)結(jié)構(gòu)的序列。每個數(shù)據(jù)結(jié)構(gòu)包含對給定字形的引用和與字形的包含和被包含輪廓線有關(guān)的信息。
然后,在輪廓點分析步驟2400期間,對輪廓線的點進行處理。分析與對應(yīng)于原始字形數(shù)據(jù)的每個剩余點有關(guān)的輪廓信息。通過分析,獲得點坐標(biāo),如圖5D的步驟2402所示。在TrueTypeTM字體示例中,從TrueTypeTM文件中獲得該信息。該信息包括點的坐標(biāo)并按照字體單元進行規(guī)定、點的類型(例如,線上或線外點)、以及點到來自TrueTypeTM文件的原始字形數(shù)據(jù)的點陣的索引。
對每個分離形狀的點進行分類,以提供與每個點有關(guān)的額外信息。確定每個點的內(nèi)角,根據(jù)該數(shù)值,將每個點指定為凸或優(yōu)角類型的,如步驟2404所示,并確定每個點的有效鄰點,如步驟2406所示。
在將每個點分類為凸或優(yōu)角的期間,確定頂點ni處的兩個角度。將一個角分類為內(nèi)角,而將另一個角分類為外角。內(nèi)角表示由所述點及其兩個直接鄰點所定義的、屬于多邊形的內(nèi)部或限定區(qū)域的角(假設(shè)多邊形的頂點ni,則存在由ni-1、ni、ni+1定義的三角形)。外角表示由所述點及其兩個直接鄰點所定義的、屬于多邊形的外部或未限定區(qū)域的角(再次假設(shè)多邊形的頂點ni,則存在由ni-1、ni、ni+1定義的三角形)。
頂點ni處的這兩個角的和為360度。頂點ni點是點集ni-1、ni、ni+1中的公共點。為了定義角,確定頂點ni+1位于由ni-1-ni線段所定義的線的第一側(cè)或第二側(cè)。使用用于確定三角形的帶符號面積的公式,其中三角形由ni-1、ni、ni+1頂點的三元組所定義。對于順時針方向的輪廓線,三角形面積的正值對應(yīng)于ni+1頂點位于由ni-1-ni頂點對所定義的線的第一側(cè)。因此,ni頂點是優(yōu)角型的。相反,負值或零值對應(yīng)于ni頂點位于由ni-1-ni頂點對所定義的線的右側(cè),因而ni頂點是凸型的。對于逆時針方向的輪廓線,反轉(zhuǎn)所述定義。
可以通過余弦定理來確定角的角度值。因此,將具有鈍內(nèi)角的任何點分類為優(yōu)角點,而將具有銳內(nèi)角的任何點分類為凸點。當(dāng)內(nèi)角為平角時,根據(jù)本發(fā)明的一個實施例,可以將所述點定義為凸點。在另一實施例中,當(dāng)內(nèi)角為平角時,將所述點定義為優(yōu)角點。
針對每個點還確定有效相鄰點(“有效鄰點”),如步驟2406所示。如果滿足以下條件,則給定字形的輪廓線的任意點為任何其他給定點的有效鄰點(1)這兩個點屬于相同的分離形狀(separate shape),例如,這兩個點屬于外輪廓線或任何被包含的內(nèi)輪廓線;以及(2)由這兩個點所定義的線段不與所述分離形狀的任何輪廓線的任何其他線段相交,例如,由這兩個點所定義的線段被完全包含在所述分離形狀的內(nèi)部。如果任何點滿足上述兩個條件,則將其添加到所述點的有效鄰點列表中。然后,按照其距給定點的距離,對有效鄰點進行分類和排序,從而使最近的鄰點排在第一位。
分離形狀的面積由其外輪廓線和內(nèi)輪廓線聯(lián)合確定Sarea=(A∪Bi+A∪Bi+1+…+A∪Bi+n)-(A∩Bi+A∩Bi+1+…+A∩Bi+n),其中S是分離形狀面積,Aarea是分離形狀S的外輪廓線的面積,以及Bi…n是分離形狀S的內(nèi)輪廓線的面積。
給定點的有效鄰點的特征可以是從給定點的“可見”點。繪制直線段連接點與給定點,并表示這兩個點之間的可視路徑。如果所述直線段并不受到分離形狀或所述輪廓線的其他線段的影響,則所述點是給定點的有效鄰點,即可以從給定點“看到”所述點。
圖8示出了具有點之間的線的字形形狀的線形圖,以提供對點800的有效和非有效鄰點的圖釋。點800與其他點802、804、806和808之間的線示出了所述其他點802、804、806和808是點800的有效鄰點??梢詮狞c800“看到”所述其他點802、804、806和808,而不會與字形形狀的任何線段相交,并屬于與點800相同的分離形狀。點800與點810和812之間的線示出了第一點810和820不是點800的有效鄰點,因為點800和第一點810和812并不屬于相同的分離形狀。點800與點814和816之間的線示出了第二點814和816不是點800的有效鄰點,因為這些線與字形形狀的線段相交。
在字形解析步驟3000期間,將字形解析/分解為一系列的“筆劃”。所述筆劃不必具有與給定字形的每個分離形狀的對應(yīng)性??梢詫⒁粋€分離形狀解析/分解為多個筆劃。除非特別聲明,術(shù)語“解析”和“分解”可以互換地使用。
圖9示出了被解析為由數(shù)字902、904、906、908、910和912表示的筆劃的樣本字形900的示例的線形圖。如圖所示,分離形狀914具有由數(shù)字906、908和910表示的三個筆劃。
筆劃可以對應(yīng)于以鋼筆書寫或以畫筆繪制字符的方法。例如,一些字符可以只通過一個筆劃來書寫,而其他字符需要幾個筆劃。因此,可以根據(jù)鋼筆的自然運動的概念得出“運動矢量”。運動矢量對應(yīng)于位于類似于鋼筆的自然運動的相同路徑上的筆劃的點。因為并非輪廓的所有點均位于相同的路徑上,只將運動矢量應(yīng)用于特定的點集,以便定義筆劃的運動。
圖5E提供了典型字形解析處理的流程圖。將每個提取出的筆劃幾何地定義為閉合多邊形或輪廓線。每個筆劃具有兩側(cè),筆劃的第一側(cè)和筆劃的第二側(cè)。每側(cè)均具有一對起始和結(jié)束點,表示該側(cè)起始和結(jié)束的點??梢园凑沼欣趶牡谝粋?cè)的第一點到第二側(cè)的最后一點順序遞增的順序存儲兩側(cè)的所有點。
在一個實施例中,可以由陣列數(shù)據(jù)結(jié)構(gòu)中的點來表示每個輪廓線,并且可以通過其在陣列中的入口的索引來引用每個點。通過選擇定義第一和第二側(cè)的一對點來確定起始點,如步驟3002所示,并遞增遍及第一和第二側(cè)的點,如步驟3004所示。筆劃的第一側(cè)向陣列中的下一入口移動,而相對側(cè)向陣列中的前一入口移動。例如,如果第一側(cè)的當(dāng)前點是點3,則要遞增的下一點是點4。類似地,如果第二側(cè)的當(dāng)前點是點11,則要遞增的下一點是點10。
隨著對點的遍歷,定義了輪廓線的第一和第二側(cè)的路徑從一點移動到下一點。將遍歷路徑存儲為點遞增的集合,并在每個點遞增之后,由系統(tǒng)確定筆劃是否閉合,如步驟3006所示。當(dāng)?shù)谝粋?cè)和第二側(cè)在同一點相會時,完成筆劃處理??蛇x地,對于完成筆劃,也可以滿足其他條件。
如果筆劃并未閉合,則針對每個遞增點,確定該遞增點是否為候選點,如步驟3008所示。候選點對應(yīng)于輪廓中兩個或多個筆劃可能彼此相交的轉(zhuǎn)彎或角。因此,要遞增到的下一點可能不是沿路徑的下一點。而是,要遞增的下一點可能是與運動矢量相對應(yīng)的點。在一個實施例中,候選點是具有鈍內(nèi)角的優(yōu)角點。
此要遞增到的下一有效點為“移至”點。移至點不必是候選點的直接鄰點;而是,移至點對應(yīng)于運動矢量,從而當(dāng)前筆劃得到與用于書寫該筆劃的鋼筆的自然運動概念相對應(yīng)的自然連續(xù)。因此,沿路徑從候選點向并未移至點得下一點移動違反了筆劃的自然連續(xù)的概念。因此,根據(jù)運動矢量選擇針對候選點的有效移至點,并將有效移至點存儲為“發(fā)生”或“事件”,如步驟3010所示。
相反,如果此側(cè)的當(dāng)前點并非候選點,則不必應(yīng)用運動矢量確定。在這種情況下,可以與運動矢量無關(guān)地選擇有效移至點,如步驟3012所示。
一側(cè)的“移至”點位于由該側(cè)的前一點和該側(cè)的當(dāng)前點形成的直線附近。根據(jù)平角與由包括前一點(side_previous_point)、當(dāng)前點(side_current_point)和所提出的“移至”點的三個頂點所定義的角之間的差,來確定點是否在附近。優(yōu)選地,所述差值小于指定的平坦度閾值。對于每個特定的字體,平坦度閾值可以不同,典型地,其范圍在10到25度之間。
在存在要評估的幾個已提出的移至點的一個實施例中,被選為有效移至點的點是在二者之間的距離方面最靠近該側(cè)的當(dāng)前點的點。在存在要評估的幾個已提出的移至點的另一實施例中,被選為有效移至點的點是針對所述點的差值最低于平坦度閾值的點。也可以使用其他評估標(biāo)準(zhǔn)。
如果找到有效移至點,則向有效移至點繼續(xù)運動。將從候選點到有效移至點的運動存儲為“發(fā)生”或“事件”,如步驟3012所示??梢葬槍γ恳粋?cè),對事件進一步分類,作為共有事件。當(dāng)在兩側(cè)同時發(fā)生事件時,記錄共有事件。將共有事件存儲為兩側(cè)的候選點及其移至點對。事件可以將兩個筆劃連接在一起,并可以用作其他筆劃的潛在起始點。
步驟3014確定是否已經(jīng)處理了給定筆劃的所有點或者筆劃是否閉合。如果還有待處理的點或如果筆劃未閉合,則重復(fù)步驟3004~3012。否則,步驟3016確定是否還有待處理的、針對字形的任何事件或點。如果有,則選擇新的點集,如步驟3018所示,并重復(fù)步驟3004~3016。否則,處理完成。
圖10示出了依照字形解析處理3000進行了解析的典型字形1000的線形圖。典型字形1000具有由點1到37所定義的輪廓形狀。被包圍在矩形1002、1004、1006、1008中的起始點對是筆劃1010、1012、1014、1016的起始點。由矩形1006和1008表示的點9、30和32、35還是作為筆劃1014和1016的起始點的事件。被包圍在圓圈中的點9、33、18、32和36是候選點,以及根據(jù)由筆劃1010、1012、1014和1016的中心箭頭所示的每個筆劃的方向,其相應(yīng)的移至點分別為30、10、37、35和1。候選點33為筆劃1014和1016所共有,因而,將其與針對筆劃1014的移至點10和針對筆劃1016的移至點34相關(guān)聯(lián)。以表示運動矢量的箭頭來表示每個筆劃1010、1012、1014、1016。
圖5F提供了字形解析處理3000的更為詳細的流程圖。步驟3020設(shè)置多個處理值。在一個實施例中,多個處理值包括平坦度閾值、起始閾值、起始跨距深度值、未標(biāo)記點容差值和未標(biāo)記線段容差值。
平坦度閾值用于評估潛在的移至點。起始閾值、起始跨距深度值用于確定起始點。未標(biāo)記點容差值用于規(guī)定針對給定的形狀、多少未處理的點是可以容忍的。未標(biāo)記線段容差值用于規(guī)定針對一個形狀、多少未處理的線段是可以容忍的。
然后,選擇起始點對,如步驟3022所示。在一個實施例中,根據(jù)其在x-y軸上的位置來選擇起始點,例如,將最左邊的點對(如圖10所示的點5、6、21和22)選作起始點。也可以使用選擇起始點的其他方法。
起始閾值用于將點定義為候選。如果所述頂點處的角小于起始閾值,則所述點為有效起始點對,并將其定義為凈(clean)起始點。如果兩個角度都大于起始閾值,則丟棄該對,并拾取另一對。如果一個角大于起始閾值,則將作為所述一個角與360度之間的差值的角與起始閾值進行比較。如果比較值小于起始閾值,所述點對是有效起始點對并定義為臟(dirty)起始點。
對并非直接鄰點;典型地,其間有至少一個點。通過起始跨距深度值來定義以點數(shù)為單位的距離的深度。
可以通過利用字體圖案來簡化選擇起始點的處理。在一個實施例中,如果使用字體圖案,則根據(jù)字體圖案選擇的起始點對具有高于其他對的優(yōu)先級。類似地,凈對具有高于臟對的優(yōu)先級。在確定所有可能的對之后,在步驟3024中,對所述對進行優(yōu)先級排序,并在步驟3026中,根據(jù)優(yōu)先級進行選擇。在每個優(yōu)先級組中,選擇點之間具有最小距離的對。
在拾取起始點對之后,定義筆劃的兩側(cè),如步驟3028所示。每一側(cè)均具有起始點,并沿著從此起始點開始的路徑遞增,如步驟3030所示。在一個實施例中,將每個形狀的點存儲在陣列數(shù)據(jù)結(jié)構(gòu)中,以及沿著路徑的遞增導(dǎo)致了從存儲起始點的陣列單元開始對整個陣列的迭代。
然后,評估所述點,以確定其是否為候選點,如步驟3032所示。當(dāng)遇到候選點時,如上述步驟3010和3012中所述,確定有效移至點。如果所述點并非候選點,則系統(tǒng)沿路徑遞增到下一點,如步驟3034所示。對于非候選點,如果兩側(cè)的直接點均為有效鄰點,滿足等待角評估,并且下一點并不由另一已創(chuàng)建的筆劃所有,則將直接點遞增到下一點。典型地,這些條件只對于非候選點的點有效,因為由于筆劃交叉,候選點由多個筆劃所有。
使用“可見(can-see)”規(guī)則來確定兩側(cè)的直接點是否為有效鄰點。如果在每次遞增,兩側(cè)的直接點相互“看到”,即第一側(cè)的直接點使第二側(cè)的直接點在其有效鄰點中,則滿足可見規(guī)則??梢娨?guī)則的違反可能由于在發(fā)生期間錯誤地選擇移至點或由于字形的形狀的布局而導(dǎo)致。
在確定針對給定候選點的有效移至點期間,可見規(guī)則的違反導(dǎo)致所提出的移至點被丟棄。如果由于字形的形狀的布局引起違反,則丟棄直接點而從另一側(cè)的有效鄰點列表中選擇最靠近直接點的點。例如,如果在沿筆劃的一側(cè)運動的同時,可見規(guī)則的違反導(dǎo)致該側(cè)的直接點被丟棄,并由來自另一側(cè)的直接點的鄰點列表的第一可用點替代。
等待角度值用于通過對沿筆劃兩側(cè)的運動的遞增速率進行歸一化來防止可能的“可見”規(guī)則違反。例如,如果沿第一側(cè)的路徑存在較少的點且點之間的距離與第二側(cè)的點相比相對較大,則第一側(cè)可能快速地遞增。因此,第二側(cè)可能包括更多的點,而針對相同的遞增數(shù),滯后于第一側(cè)。為了有利于兩側(cè)的當(dāng)前點最近,針對每一側(cè),將由當(dāng)前點且相對于兩側(cè)而定義的角于等待角進行比較。如果一側(cè)的角小于等待角,則并不遞增該側(cè)的當(dāng)前點,則遞增針對另一側(cè)的當(dāng)前點。
圖11示出了針對幾個點的等待角。由點1~9定義矩形,并具有起始點1和9。路徑分別從起始點1和9向點2和8遞增。將等待角α1和α2于閾值等待角(例如,66度)進行比較。由于等待角α1和α2都超過66度,兩個路徑都遞增。將等待角α1和α1與閾值等待角進行比較。因為等待角α1為45度,是小于66度的等待角,則來自點7的路徑將不再遞增到點6,而來自點3的路徑將遞增到點4。
每次兩側(cè)執(zhí)行向其相應(yīng)下一點運動時,或在發(fā)生或事件發(fā)生之后,系統(tǒng)確定當(dāng)前處理的筆劃是否可以閉合,如圖5F中的步驟3036所示。筆劃的閉合定義了數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)存儲定義了兩側(cè)的所有點、每側(cè)的起始和結(jié)束點對和事件。將每個處理過的點分類為已擁有的,除了候選點,因為候選點可以為幾個筆劃所共有??梢詫⒐灿泻蜻x點的筆劃數(shù)存儲在數(shù)據(jù)結(jié)構(gòu)中。
在筆劃閉合時,系統(tǒng)確定是否還有未處理的字形形狀的點,如步驟3038所示。例如,如果任意點未被擁有且不是候選點,則該點仍未被處理。評估事件以確定是否還有待處理的剩余事件。可以將事件存儲在隊列中,并將隊列中的第一事件處理為針對下一筆劃的起始點對。如果事件隊列為空,則拾取新拾取點,并選擇起始點對,如步驟3040所示。當(dāng)不存在待處理點或未處理的點數(shù)在用戶定義的數(shù)值之內(nèi)時,點處理完成。
圖12示出了通過如圖10所示的字形處理而得到的典型日志。該日志列出了解析處理步驟和每個筆劃所包含的信息。迭代典型字形的全部分離形狀,以便將其中的每一個解析為筆劃。
字形解析3000的最后一步是對筆劃的融合(merging),如步驟3042所示。為了減少冗余,可以將特定的筆劃統(tǒng)一為一個筆劃,從而減少緊湊字體格式的字形中的行數(shù)。融合處理搜索完全包含的筆劃和清楚連接和隱含連接的筆劃。
完全包含的筆劃是完全包含在另一筆劃中的筆劃。在一個實施例中,筆劃是否為完全包含的確定包括確定第一筆劃的所有點是否被包含在由第二筆劃的點所限定的邊界內(nèi)的步驟。如果筆劃是完全包含的,則丟棄該筆劃。
清楚連接的筆劃是部分由共有事件所定義的筆劃。當(dāng)在形狀的兩側(cè)發(fā)生事件時,這些事件定義了共有事件。共有事件定義了兩對點,所述形狀的每側(cè)一對。當(dāng)從事件隊列中處理事件時,每對點隨后定義了另一筆劃的起始點對。因此,一個共有事件可以是兩個筆劃的源。可以將這些筆劃融合在一起以形成單一筆劃。
圖13示出了清楚連接的筆劃。由點1~20定義的字形包括筆劃1020和1022。共有事件1024和1026分別是由點13~18和3~8所定義的筆劃的起始點。因此,將這些筆劃進行組合,以形成由點3~8和13~18所定義的清楚連接的筆劃1022。
當(dāng)一個筆劃的結(jié)束點對還是另一筆劃的起始點對時,隱含連接的筆劃發(fā)生。迭代筆劃的所有點,以確定筆劃是否具有匹配結(jié)束點或起始點。如果是,將筆劃融合為單一筆劃。
在融合步驟之后,解析處理3000完成,并執(zhí)行中線提取處理4000。中線對應(yīng)于給定幾何形狀的多邊形骨架。例如,矩形的中線可以是與矩形的長軸相對應(yīng)的直線。因此,骨架是提供了形狀的近似視圖的、由線段組成的一條或多條線。將給定字形分解為筆劃,其中每個筆劃提供了在字形的最終的基于筆劃的形狀中的中線的基礎(chǔ),有利于字形骨架的產(chǎn)生。在中線提取處理4000期間,提取所有筆劃的相應(yīng)中線。例如,在圖9中示出了所提取出的中線916。
每個筆劃由兩側(cè)和起始點和結(jié)束點對定義。通過迭代筆劃的所有點來確定中線。對于第一側(cè)的每個點,找出來自第二側(cè)的相應(yīng)最近點。對于由這兩個點定義的線段,找出終端,并添加到中線中。針對第二側(cè)的每個點,重復(fù)該處理。在已經(jīng)對兩側(cè)進行了處理之后,計算這兩條中線的長度。將較長的中線定義為筆劃的中線。
可以通過類似于上述字形簡化處理2100的簡化處理,以及通過按照與參照上述解析處理3000的融合步驟描述的類似方式,對中線進行融合,來簡化最終的中線。中線簡化減少了字形骨架中的點數(shù)。
在元素分析步驟5000中,針對具有重復(fù)圖案的元素,搜索字形。根據(jù)本發(fā)明的一個實施例,圖案匹配確定圖案是否重復(fù)??梢允褂脠D案數(shù)據(jù)庫來執(zhí)行圖案匹配。從字體中提取出字體中頻繁出現(xiàn)的圖案。在數(shù)據(jù)庫中定義字形,并存儲字形中具有匹配圖案的特定部分。在進行圖案匹配處理之前,從數(shù)據(jù)庫中讀取信息。
在圖案匹配處理期間,將給定字形的輪廓線與來自數(shù)據(jù)庫的圖案進行比較。所述比較基于通過測量形狀的特定參數(shù)的不變性函數(shù)而得到的相似性測量。即使在形狀受到了不同的幾何變形時,這些參數(shù)通常仍然保持不變,因此對于變形而言是“不變的”。
可以通過等距、相似和仿射變形來確定不變性。等距變形是保持距離的平面變形。相似是保持形狀的平面變形,并且是通過將比例縮放變形(也稱為位似)與等距進行合成而得到的平面變形。仿射變形是保持線條和平行的變形。用于圖案匹配的典型變形可以包括平移、比例縮放和非比例縮放。也可以使用其他變形。
在其中通過沿X或Y軸的移位值移位原始形狀的每個點、從而使得下式成立的二維平面中的平移期間,典型的圖案匹配處理對兩個形狀的相似性進行比較Xi(new)=Xi(org)+<偏移>以及Yi(new)=Y(jié)i(org)+<偏移>,其中Xi和Yi是形狀和圖案的第i個點的X和Y坐標(biāo)。如果偏移是已知的,則可能只需要一次比較,例如,通過從Xi(new)中減去該數(shù)值是否能得到Xi(org)。
如果偏移是未知的,則可能需要形狀和圖案之間的額外比較。例如,可以確定形狀和圖案的最右邊的點,并減去相應(yīng)的X和Y坐標(biāo),以獲得偏移值。選擇形狀的剩余點,并從偏移值中減去這些點的X和Y坐標(biāo)。如果作為減法結(jié)果,得到了圖案的相應(yīng)點的X和Y坐標(biāo),則形狀相似于圖案。如果減法對于形狀的所有點都給出這種結(jié)果,則形狀相似于圖案。相反,如果減法導(dǎo)致形狀中的X和Y坐標(biāo)不同于圖案的點的X和Y坐標(biāo),則形狀不相似于圖案。因此,在平移變形下,相似形狀和圖案的距離保持不變。
對于每個字形,如參照上述圖2所述,將標(biāo)識圖案識別為公共元素202或惟一元素212。如果未找到匹配圖案,則惟一元素用于描述特定筆劃。
如由統(tǒng)一碼聯(lián)盟提供的字體數(shù)據(jù)等數(shù)據(jù)可以用于定義字體元素。例如,對于定義了象形文字的CJK字形,可以使用基于部首的元素提取。部首是用于檢索CJK字典中的搜索處理的筆劃甚或完整的象形文字。類似地,在統(tǒng)一碼規(guī)范下,按照部首對全部象形文字進行分組(例如,參見康熙部首或統(tǒng)一碼規(guī)范的CJK部首補充)。這些部首是要提取的主要元素。在圖案匹配處理期間使用的圖案數(shù)據(jù)包括作為部首的字形或字形的一部分。除了CJK部首之外,如果任意特定的字形或字形的一部分在多個字形中重復(fù)出現(xiàn),可以根據(jù)可視估計來定義額外的圖案。
作為另一示例,針對韓文Hangul字節(jié)(syllable),定義了允許將每個Hangul字節(jié)分解為其Jamo字符的分解規(guī)則,所述Jamo字符也由統(tǒng)一碼規(guī)范所覆蓋。在韓語中,所有的Hangul字節(jié)均由Jamo字符組成,因此,可以認為Jamo字形是構(gòu)成韓文的Hangul字形的基本元素。
對于其他語言,例如,可以使用統(tǒng)一碼規(guī)范圖。對于每個合成字形,這些圖定義了合成字形所包括的簡單字形。存在針對Hangul、日文、一些CJK象形文字、復(fù)雜Latin字形和復(fù)雜阿拉伯字形的規(guī)范圖。在元素分析5000中使用此信息,以定義緊湊字體格式的元素。
在另一實施例中,實施圖案匹配,而無需特定的字形數(shù)據(jù)。迭代每個字形,并將其存儲在評估數(shù)據(jù)庫中。系統(tǒng)根據(jù)存儲在公共數(shù)據(jù)庫中的數(shù)據(jù),遞歸地確定是否存在公共元素。
在轉(zhuǎn)換步驟6000中,將輪廓字體的幾何數(shù)據(jù)調(diào)整為緊湊字體格式的規(guī)范。例如,將TrueTypeTM字樣設(shè)計單元中所規(guī)定的原始點轉(zhuǎn)換為緊湊字體格式設(shè)計單元。此轉(zhuǎn)換可以用于多種字體規(guī)格,如字體基線、字體上升和字體下降等。也可以使用其他的規(guī)格。
轉(zhuǎn)換步驟6000將字體數(shù)據(jù)存儲為一組數(shù)據(jù)結(jié)構(gòu)200和數(shù)據(jù)庫250,如參照上述圖2所述。將與其他元素圖案匹配的元素存儲為元素數(shù)據(jù)庫250中的公共元素204,并在相應(yīng)的字形數(shù)據(jù)結(jié)構(gòu)200中進行引用。字形數(shù)據(jù)結(jié)構(gòu)200還存儲相應(yīng)的移位X值206、移位Y值208和縮放值210。如參照上述圖2所述,與伴隨描述數(shù)據(jù)216一起存儲惟一元素212。另一典型數(shù)據(jù)結(jié)構(gòu)是如上述臨時申請60/393,795中所述的Slangsoft字體格式的數(shù)據(jù)結(jié)構(gòu)。也可以使用其他數(shù)據(jù)結(jié)構(gòu)和存儲體系結(jié)構(gòu)。
在完成轉(zhuǎn)換步驟6000之后,可以將字體數(shù)據(jù)存儲在移動設(shè)備100上,以便與參照上述圖1所述的應(yīng)用程序或再現(xiàn)引擎一起使用。也可以將轉(zhuǎn)換步驟6000包含在元素分析步驟5000中。
盡管已經(jīng)參照字體數(shù)據(jù),對本申請的系統(tǒng)和方法進行了描述,本申請的系統(tǒng)和方法也可以應(yīng)用于其他數(shù)據(jù)類型,如圖形數(shù)據(jù)實體、地圖實體或其他可視顯示實體。在另一實施例中,本系統(tǒng)和方法的典型數(shù)據(jù)結(jié)構(gòu)可以用于以緊湊的格式存儲地圖數(shù)據(jù)。例如,可以按照典型數(shù)據(jù)結(jié)構(gòu)的緊湊格式存儲如城市等地理區(qū)域的地圖,并通過再現(xiàn)引擎進行訪問,以重構(gòu)城市地圖。額外地,隨著移動設(shè)備改變位置,可以下載移動設(shè)備所處的新地理區(qū)域的額外地圖數(shù)據(jù)。
所撰寫的說明書使用示例性實施例來公開本發(fā)明,包括了最佳模式,并且使本領(lǐng)域的普通技術(shù)人員能夠?qū)崿F(xiàn)和使用本發(fā)明。如果其他實施例或設(shè)備具有并非不同于權(quán)利要求書的文學(xué)語言的元素或等價于權(quán)利要求書中所述的元件,則其仍然包括在權(quán)利要求書的范圍內(nèi)。
權(quán)利要求
1.一種從已存儲的字體數(shù)據(jù)再現(xiàn)文本的系統(tǒng),所述系統(tǒng)包括存儲在計算機可讀介質(zhì)中的字體數(shù)據(jù)結(jié)構(gòu),所述字體數(shù)據(jù)結(jié)構(gòu)包括多個字形的公共元素數(shù)據(jù)和惟一元素數(shù)據(jù);再現(xiàn)軟件模塊,存儲在計算機可讀介質(zhì)中并包括計算機可執(zhí)行指令,操作用于使計算設(shè)備訪問所述字體數(shù)據(jù)結(jié)構(gòu),并根據(jù)所訪問的公共元素數(shù)據(jù)和惟一元素數(shù)據(jù),顯示字形;以及移動設(shè)備,包括計算設(shè)備和存儲器,所述存儲器操作用于存儲所述字體結(jié)構(gòu)數(shù)據(jù)和所述再現(xiàn)軟件模塊,以及所述計算設(shè)備操作用于執(zhí)行所述再現(xiàn)軟件模塊計算機可執(zhí)行指令。
2.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于所述字體結(jié)構(gòu)包括公共元素數(shù)據(jù)庫,包括公共元素標(biāo)識符字段和描述數(shù)據(jù)字段,所述公共元素標(biāo)識符字段操作用于存儲公共元素標(biāo)識符數(shù)據(jù),以及所述描述數(shù)據(jù)字段操作用于存儲定義了公共元素形狀的描述數(shù)據(jù);以及至少一個字形數(shù)據(jù)結(jié)構(gòu),包括至少一個公共元素記錄,所述至少一個公共元素記錄包括公共元素標(biāo)識符字段和解譯字段,所述公共元素標(biāo)識符字段操作用于存儲與存儲在所述公共元素數(shù)據(jù)庫中的公共元素相對應(yīng)的公共元素標(biāo)識符數(shù)據(jù),以及所述解譯字段操作用于存儲用在解譯所述公共元素形狀中的解譯數(shù)據(jù)。
全文摘要
一種根據(jù)源字體數(shù)據(jù)創(chuàng)建字體格式數(shù)據(jù)的方法,包括分析源字體數(shù)據(jù)以獲得多個字形的字形數(shù)據(jù);解析所述字形數(shù)據(jù);從解析后的字形數(shù)據(jù)中提取出中線數(shù)據(jù);將所述中線數(shù)據(jù)分類為惟一元素數(shù)據(jù)和公共元素數(shù)據(jù);將惟一元素數(shù)據(jù)和公共元素數(shù)據(jù)與所述多個字形中的每一個字形相關(guān)聯(lián)。
文檔編號G06F17/30GK101093475SQ200710096770
公開日2007年12月26日 申請日期2003年7月3日 優(yōu)先權(quán)日2002年7月3日
發(fā)明者瓦迪姆·富克斯, 丹尼斯·N·費多堅科 申請人:2012244安大略公司