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