亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

矢量圖形的填充方法和矢量圖形的填充裝置與流程

文檔序號:11232008閱讀:1275來源:國知局
矢量圖形的填充方法和矢量圖形的填充裝置與流程

本發(fā)明涉及計算機圖形處理技術(shù)領(lǐng)域,具體而言,涉及一種矢量圖形的填充方法和一種矢量圖形的填充裝置。



背景技術(shù):

矢量圖形是印前領(lǐng)域中大量使用的一種頁面描述對象,由于它具有在坐標(biāo)變換下的高度保真性,因而可以較為精確地還原出描述者的本來意圖。文字是印前領(lǐng)域中大量使用的另一種頁面描述對象,它的內(nèi)部描述數(shù)據(jù)也是基于矢量圖形的,因此,矢量圖形的光柵化是整個印前輸出系統(tǒng)的核心部件。矢量圖形光柵化的主要工作是將用戶坐標(biāo)空間下的矢量描述數(shù)據(jù)轉(zhuǎn)換為設(shè)備坐標(biāo)空間下的點陣信息,其中最重要及最關(guān)鍵的一步,是對組成矢量圖形對象的每一個路徑按照一定的規(guī)則進行填充,得到相應(yīng)的內(nèi)部像素點陣描述信息。

一個路徑由一個或多個子路徑構(gòu)成,一個子路徑由一組首尾互相連接的直線矢量或曲線矢量構(gòu)成,子路徑所形成的輪廓是封閉的。對于單個的不自交的子路徑,全部區(qū)域被其剖分而成的內(nèi)部和外部十分明確,填充區(qū)域(即子路徑所圍的內(nèi)部區(qū)域)一目了然;但對其他情形,則由于子路徑本身可能存在自交,子路徑與子路徑之間也可能存在包含或相交的關(guān)系,內(nèi)部與外部不再顯而易見,因此必須考慮填充的纏繞規(guī)則,以便在子路徑發(fā)生包含或相交的情況時據(jù)之確定填充區(qū)域。對于全部區(qū)域上的任意一點,以之為起點任意作一條通往無限遠處的射線,該點有一個初始值為0的纏繞數(shù),當(dāng)路徑中的某一子路徑從左向右穿越該射線時,纏繞數(shù)加1,當(dāng)路徑中的某一子路徑從右向左穿越該射線時,纏繞數(shù)減1,當(dāng)計算完該路徑與該射線所有的穿越情況之后,即得到該點最終的纏繞數(shù),為此,可以定義兩種纏繞規(guī)則:非零規(guī)則和奇偶規(guī)則。非零規(guī)則就是將那些纏繞數(shù) 不等于0的點定義為內(nèi)部點,其組成的區(qū)域為填充區(qū)域。奇偶規(guī)則則是將那些纏繞數(shù)為奇數(shù)的點定義為內(nèi)部點,其組成的區(qū)域為填充區(qū)域。對于簡單的路徑,這兩種纏繞規(guī)則定義的填充區(qū)域是相同的,填充結(jié)果自然也完全一樣。但對于復(fù)雜的路徑,這兩種纏繞規(guī)則定義的填充區(qū)域就會產(chǎn)生差別,填充結(jié)果也會不一樣。例如,有三個路徑,分別構(gòu)成五角星、內(nèi)外同向圓環(huán)和內(nèi)外異向圓環(huán)的形狀,用非零規(guī)則填充的結(jié)果如圖1a所示,用奇偶規(guī)則填充的結(jié)果如圖1b所示。兩種規(guī)則各有其方便適宜的應(yīng)用領(lǐng)域,一種完善的矢量圖形的填充方法需要正確處理這兩種纏繞規(guī)則。

對一個路徑進行填充的過程,可視為將該路徑所圍成的封閉區(qū)域內(nèi)部的設(shè)備空間上的像素進行涂黑的過程。當(dāng)一個像素完全落在填充區(qū)域內(nèi)部時,毫無疑問該像素應(yīng)當(dāng)被涂黑;當(dāng)一個像素完全落在填充區(qū)域外部時,毫無疑問該像素不當(dāng)被涂黑;當(dāng)一個像素一部分落在填充區(qū)域內(nèi)部、一部分落在填充區(qū)域外部時,該像素是否應(yīng)當(dāng)被涂黑則是一個需要仔細考慮的問題,不同的處理規(guī)則可能會產(chǎn)生不同的填充結(jié)果,從而直接影響到最終結(jié)果的質(zhì)量。對于較大尺寸的路徑或者較高分辨率的情況,設(shè)備空間上的像素相對較多,路徑的各個細節(jié)部分都包含了足夠多的像素,因而無論采取何種像素涂黑規(guī)則,都能夠得到滿意的填充結(jié)果。(在高分辨率下填充字符“$”的路徑,結(jié)果如圖2a所示)一種常見的像素涂黑規(guī)則是“任意相交”,即只要一個像素的任意部分與填充區(qū)域內(nèi)部相交就涂黑該像素,亦即當(dāng)一個像素一部分落在填充區(qū)域內(nèi)部、一部分落在填充區(qū)域外部時,涂黑該像素。采用任意相交的像素涂黑規(guī)則,可以保證不會出現(xiàn)丟點的現(xiàn)象,其實現(xiàn)也相對容易,然而,對于較小尺寸的路徑或者較低分辨率的情況,設(shè)備空間上的像素相對較少,完全落在路徑所圍成的封閉區(qū)域內(nèi)部的像素也相對減少,而部分落在路徑所圍成的封閉區(qū)域內(nèi)部的像素則相對增多,此時采用任意相交的像素涂黑規(guī)則就會使得眾多這樣的路徑邊緣像素被涂黑,從而導(dǎo)致填充結(jié)果中細節(jié)大量丟失,圖形畸變嚴(yán)重,特別地,基于矢量圖形描述的小文字的填充結(jié)果會出現(xiàn)大量筆劃粘連,變得難以辨識。(在低分辨率下用任意相交的像素涂黑規(guī)則填充字符“$”的路徑,結(jié)果如圖2b所示)為此,另一種像素涂黑規(guī)則應(yīng)運而生,這就是“中心 覆蓋”規(guī)則,即只涂黑那些中心點被填充區(qū)域內(nèi)部覆蓋的像素,亦即當(dāng)且僅當(dāng)一個像素的中心點落在填充區(qū)域內(nèi)部時,涂黑該像素。采用中心覆蓋的像素涂黑規(guī)則可以有效地解決上述低分辨率下填充結(jié)果出現(xiàn)大量像素粘連、細節(jié)丟失、嚴(yán)重畸變從而導(dǎo)致可辨識性大大降低的問題。(在低分辨率下用中心覆蓋的像素涂黑規(guī)則填充字符“$”的路徑,結(jié)果如圖2c所示)然而,單純采用中心覆蓋規(guī)則,也會產(chǎn)生新的問題,那就是當(dāng)路徑中存在較細的區(qū)域時,這些區(qū)域有可能會因為無法覆蓋到任何像素中心而被丟失,由此將導(dǎo)致填充結(jié)果中出現(xiàn)丟點、斷線甚至丟線等情況,特別地,基于矢量圖形描述的小文字的填充結(jié)果會出現(xiàn)筆劃的局部或整體性缺失,從而大大降低了文字的可辨識性。(在低分辨率下單純用中心覆蓋的像素涂黑規(guī)則填充較細字體的字符“$”的路徑,結(jié)果如圖2d所示)。

如何恰當(dāng)?shù)乇苊鈦G點是基于中心覆蓋規(guī)則的矢量圖形的填充方法面臨的一大難題。在現(xiàn)有技術(shù)中,主要通過下列幾種方式來應(yīng)對這一難題:一、增加對丟點的彌補機制,當(dāng)出現(xiàn)路徑中的輪廓矢量以不同方向穿越某相鄰兩像素中心之間的連線(水平或豎直)并且該兩個像素中心都未被路徑的填充區(qū)域覆蓋時,即認為發(fā)生了丟點,需要對上述兩個像素之一進行涂黑以彌補丟點;這一方式主要對文字有效,因為文字的矢量路徑描述相對比較規(guī)則,而對于一般圖形的矢量路徑描述,則當(dāng)路徑中存在一個子路徑的所有輪廓矢量都不與任意相鄰兩像素中心之間的連線相交時,該子路徑就會被丟失,因此丟點的問題仍然存在。二、利用反走樣機制,對丟點在一定程度上進行彌補,但這種彌補只能是相對的,當(dāng)丟點所對應(yīng)的填充區(qū)域小到一定程度時,反走樣就無法對其進行彌補了??梢钥闯觯鲜龇绞蕉几髯源嬖谳^大的局限性,并不能徹底杜絕丟點的發(fā)生,因而無法忠實地還原圖形矢量描述的意圖。

因此,如何在填充圖形時避免出現(xiàn)丟點,從而提高圖形的顯示效果成為亟待解決的技術(shù)問題。



技術(shù)實現(xiàn)要素:

本發(fā)明正是基于上述技術(shù)問題,提出了一種新的技術(shù)方案,在填充圖 形時避免出現(xiàn)丟點,從而提高圖形的顯示效果。

有鑒于此,本發(fā)明的第一方面,提出了一種矢量圖形的填充方法,包括:對待填充圖形的多個矢量進行掃描求交處理,以獲取所述多個矢量的線段描述數(shù)據(jù);根據(jù)所述多個矢量中的與掃描線相交的矢量的所述線段描述數(shù)據(jù),生成線上交點表;根據(jù)所述多個矢量的所述線段描述數(shù)據(jù),得到所述多個矢量中的每個矢量的投影矢量,并將所述投影矢量插入到線間矢量鏈表中;根據(jù)所述線間矢量鏈表判斷是否存在丟點的矢量,并根據(jù)判斷結(jié)果對所述線上交點表進行更新;根據(jù)更新后的線上交點表輸出所述待填充圖形的點陣數(shù)據(jù)。

在該技術(shù)方案中,通過對待填充圖形的多個矢量進行掃描求交處理,以生成線上交點表和線間矢量鏈表,然后根據(jù)線間矢量鏈表和線上交點表輸出點陣數(shù)據(jù),從而利用精致與簡潔的算法和數(shù)據(jù)結(jié)構(gòu),快速而高效地發(fā)現(xiàn)可能出現(xiàn)的丟點,避免出現(xiàn)丟點,這樣,一方面能夠大大改善低分辨率下矢量圖形途徑的填充質(zhì)量,另一方面又不遺漏待填充圖形的任何一個矢量,從而最大限度地提高了待填充圖形在設(shè)備空間的點陣結(jié)果中呈現(xiàn)出的效果。

在上述技術(shù)方案中,優(yōu)選地,根據(jù)所述多個矢量的所述線段描述數(shù)據(jù),得到所述多個矢量中的所述每個矢量的所述投影矢量的步驟,具體包括:將所述多個矢量中的與所述掃描線相交的矢量作為非線間矢量,將所述多個矢量中的與所述掃描線不相交的矢量作為線間矢量;根據(jù)所述線間矢量的所述線段描述數(shù)據(jù),得到所述線間矢量在豎直或水平方向的投影,并將所述線間矢量在豎直或水平方向的投影作為所述投影矢量;以及獲取所述非線間矢量被所述掃描線分割而成的矢量,根據(jù)所述非線間矢量的所述線段描述數(shù)據(jù),得到被分割而成的矢量在豎直或水平方向上的投影,并將所述被分割而成的矢量在豎直或水平方向上的投影作為所述投影矢量。

在該技術(shù)方案中,通過將線間矢量的投影作為投影矢量加入到線間矢量鏈表中,以及將非線間矢量的被掃描線分割而成的每一部分的投影作為投影矢量插入到線間矢量鏈表中,從而根據(jù)線間矢量鏈表更加準(zhǔn)確地確定是否發(fā)生丟點。

其中,若掃描線為水平方向的掃描線,將線間矢量在豎直方向的投影作為投影矢量,將被掃描線分割而成的每一部分在豎直方向的投影作為投影矢量;若掃描線為豎直方向的掃描線,將線間矢量在水平方向的投影作為投影矢量,將被掃描線分割而成的每一部分在水平方向的投影作為投影矢量。

在上述任一技術(shù)方案中,優(yōu)選地,獲取所述多個矢量的所述線段描述數(shù)據(jù)的步驟,具體包括:將所述非線間矢量與所述掃描線的交點信息記錄到與所述非線間矢量對應(yīng)的所述線段描述數(shù)據(jù)內(nèi);將所述線間矢量的端點坐標(biāo)信息記錄到與所述線間矢量對應(yīng)的所述線段描述數(shù)據(jù)內(nèi)。

在該技術(shù)方案中,非線間矢量的線段描述數(shù)據(jù)包括:非線間矢量與掃描線的交點信息,例如非線間矢量與掃描線交點的坐標(biāo)值,線間矢量的線段描述數(shù)據(jù)包括:線間矢量的端點坐標(biāo)信息。

在上述任一技術(shù)方案中,優(yōu)選地,將所述投影矢量插入到所述線間矢量鏈表中的步驟,具體包括:判斷所述線間矢量鏈表中是否存在指定矢量,其中,所述指定矢量的右端點比所述投影矢量的左端點靠右,或者所述指定矢量與所述投影矢量重合;若存在所述指定矢量,根據(jù)所述投影矢量和所述指定矢量的坐標(biāo)信息,將所述投影矢量插入到所述線間矢量鏈表中;若不存在所述指定矢量,將所述投影矢量插入到所述線間矢量鏈表的表尾處。

在該技術(shù)方案中,在將投影矢量插入到線間矢量鏈表中時,通過判斷線間矢量鏈表中矢量的右端點是否比投影矢量的左端點更靠右、或者與投影矢量重合,來確定投影矢量插入到線間矢量鏈表中的位置,從而保證線間矢量鏈表的準(zhǔn)確性,進而最大可能地發(fā)現(xiàn)可能出現(xiàn)的丟點。

在上述任一技術(shù)方案中,優(yōu)選地,根據(jù)所述投影矢量和所述指定矢量的坐標(biāo)信息,將所述投影矢量插入到所述線間矢量鏈表中的步驟,具體包括:根據(jù)所述投影矢量的左端點相對于所述指定矢量的相對位置,確定所述投影矢量插入到所述線間矢量鏈表中的目標(biāo)位置,并在所述目標(biāo)位置處插入所述投影矢量;其中,所述相對位置包括以下之一:所述投影矢量的左端點在所述指定矢量的左端點的左邊,所述投影矢量的左端點與所述指 定矢量的左端點重合,所述投影矢量的左端點位于所述指定矢量的內(nèi)部,所述投影矢量的左端點與所述指定矢量的右端點重合。

在該技術(shù)方案中,若線間矢量鏈表中指定矢量的右端點比投影矢量的左端點更靠右、或者與投影矢量重合,通過比較投影矢量的左端點相對于指定矢量的相對位置,確定投影矢量插入到線間矢量鏈表中的目標(biāo)位置,從而保證線間矢量鏈表的準(zhǔn)確性,進而最大可能地發(fā)現(xiàn)可能出現(xiàn)的丟點。

在上述任一技術(shù)方案中,優(yōu)選地,將所述投影矢量插入到所述線間矢量鏈表中的步驟之后,包括:獲取所述線間矢量鏈表中的在所述投影矢量之后的且與所述投影矢量相鄰的另一矢量;根據(jù)所述投影矢量的右端點相對所述另一矢量的位置,對所述線間矢量鏈表進行相應(yīng)的更新。

在該技術(shù)方案中,在將投影矢量插入到線間矢量鏈表之后,根據(jù)投影矢量之后的且與投影矢量相鄰的另一矢量(即線間矢量鏈表中投影矢量的下一個矢量)與該投影矢量的右端點的位置,對線間矢量鏈表進行相應(yīng)的更新。

在上述任一技術(shù)方案中,優(yōu)選地,根據(jù)所述線間矢量鏈表判斷是否存在丟點的矢量,并根據(jù)所述判斷結(jié)果對所述線上交點表進行更新的步驟,具體包括:將所述線上交點表轉(zhuǎn)換為線上交點鏈表;檢查所述線間矢量鏈表中是否存在方向值為0的結(jié)點;若存在方向值為0的結(jié)點,判定所述方向值為0的結(jié)點對應(yīng)的矢量發(fā)生了丟點,將所述方向值為0的結(jié)點對應(yīng)的矢量的端點坐標(biāo)信息添加到所述線上交點鏈表中;對所述線上交點鏈表中結(jié)點的坐標(biāo)信息進行取整,并將取整后的坐標(biāo)信息保存至所述線上交點表中。

在該技術(shù)方案中,通過將線上交點表轉(zhuǎn)換為線上交點鏈表,使得對線上交點鏈表進行處理時更加方便,提高了數(shù)據(jù)處理的速度。然后通過依次檢查線間矢量鏈表中的結(jié)點的方向值是否為0,若方向值為0,說明方向值為0的結(jié)點對應(yīng)的矢量發(fā)生了丟點,則將該矢量的端點坐標(biāo)信息添加到線上交點鏈表中,從而避免出現(xiàn)丟點。由于線上交點表中的坐標(biāo)信息為正數(shù),因此,在將線上交點鏈表中結(jié)點的坐標(biāo)信息保存至線上交點表中之前,將結(jié)點的浮點數(shù)類型的坐標(biāo)信息轉(zhuǎn)換成整數(shù)類型的坐標(biāo)信息。

在上述任一技術(shù)方案中,優(yōu)選地,根據(jù)所述更新后的線上交點表輸出所述待填充圖形的所述點陣數(shù)據(jù)的步驟,具體包括:根據(jù)所述更新后的線上交點表中的數(shù)據(jù),確定所述待填充圖形的第一類型像素和第二類型像素的起始位置、終止位置和長度;根據(jù)所述第一類型像素和所述第二類型像素的起始位置、終止位置和長度,輸出所述點陣數(shù)據(jù)。

在該技術(shù)方案中,第一類型像素和第二類型像素為黑段像素和白段像素,當(dāng)然,在顯示屏上顯示圖形時,第一類型像素和第二類型像素為亮像素和暗像素。

在上述任一技術(shù)方案中,優(yōu)選地,線上交點表和線間矢量鏈表均以線為單位。

在上述任一技術(shù)方案中,優(yōu)選地,對多個矢量進行掃描求交處理時,沿豎直方向用水平的掃描線進行掃描。

在上述任一技術(shù)方案中,優(yōu)選地,在對多個矢量進行掃描求交處理的同時動態(tài)將投影矢量插入到線間矢量鏈表中。

在上述任一技術(shù)方案中,優(yōu)選地,線間矢量鏈表使用完畢之后,清除線間矢量鏈表,以節(jié)省所占用的內(nèi)存空間。

在上述任一技術(shù)方案中,優(yōu)選地,以行為處理單位輸出點陣數(shù)據(jù)。

本發(fā)明的第二方面,提出了一種矢量圖形的填充裝置,包括:第一獲取單元,用于對待填充圖形的多個矢量進行掃描求交處理,以獲取所述多個矢量的線段描述數(shù)據(jù);生成單元,用于根據(jù)所述多個矢量中的與掃描線相交的矢量的所述線段描述數(shù)據(jù),生成線上交點表;處理單元,用于根據(jù)所述多個矢量的所述線段描述數(shù)據(jù),得到所述多個矢量中的每個矢量的投影矢量,并將所述投影矢量插入到線間矢量鏈表中;第一更新單元,用于根據(jù)所述線間矢量鏈表判斷是否存在丟點的矢量,并根據(jù)判斷結(jié)果對所述線上交點表進行更新;輸出單元,用于根據(jù)更新后的線上交點表輸出所述待填充圖形的點陣數(shù)據(jù)。

在該技術(shù)方案中,通過對待填充圖形的多個矢量進行掃描求交處理,以生成線上交點表和線間矢量鏈表,然后根據(jù)線間矢量鏈表和線上交點表輸出點陣數(shù)據(jù),從而利用精致與簡潔的算法和數(shù)據(jù)結(jié)構(gòu),快速而高效地發(fā) 現(xiàn)可能出現(xiàn)的丟點,避免出現(xiàn)丟點,這樣,一方面能夠大大改善低分辨率下矢量圖形途徑的填充質(zhì)量,另一方面又不遺漏待填充圖形的任何一個矢量,從而最大限度地提高了待填充圖形在設(shè)備空間的點陣結(jié)果中呈現(xiàn)出的效果。

在上述技術(shù)方案中,優(yōu)選地,所述處理單元具體用于,將所述多個矢量中的與所述掃描線相交的矢量作為非線間矢量,將所述多個矢量中的與所述掃描線不相交的矢量作為線間矢量,根據(jù)所述線間矢量的所述線段描述數(shù)據(jù),得到所述線間矢量在豎直或水平方向的投影,并將所述線間矢量在豎直或水平方向的投影作為所述投影矢量,以及獲取所述非線間矢量被所述掃描線分割而成的矢量,根據(jù)所述非線間矢量的所述線段描述數(shù)據(jù),得到被分割而成的矢量在豎直或水平方向上的投影,并將所述被分割而成的矢量在豎直或水平方向上的投影作為所述投影矢量。

在該技術(shù)方案中,通過將線間矢量的投影作為投影矢量加入到線間矢量鏈表中,以及將非線間矢量的被掃描線分割而成的每一部分的投影作為投影矢量插入到線間矢量鏈表中,從而根據(jù)線間矢量鏈表更加準(zhǔn)確地確定是否發(fā)生丟點。

其中,若掃描線為水平方向的掃描線,將線間矢量在豎直方向的投影作為投影矢量,將被掃描線分割而成的每一部分在豎直方向的投影作為投影矢量;若掃描線為豎直方向的掃描線,將線間矢量在水平方向的投影作為投影矢量,將被掃描線分割而成的每一部分在水平方向的投影作為投影矢量。

在上述任一技術(shù)方案中,優(yōu)選地,所述第一獲取單元包括:存儲單元,用于將所述非線間矢量與所述掃描線的交點信息記錄到與所述非線間矢量對應(yīng)的所述線段描述數(shù)據(jù)內(nèi),以及將所述線間矢量的端點坐標(biāo)信息記錄到與所述線間矢量對應(yīng)的所述線段描述數(shù)據(jù)內(nèi)。

在該技術(shù)方案中,非線間矢量的線段描述數(shù)據(jù)包括:非線間矢量與掃描線的交點信息,例如非線間矢量與掃描線交點的坐標(biāo)值,線間矢量的線段描述數(shù)據(jù)包括:線間矢量的端點坐標(biāo)信息。

在上述任一技術(shù)方案中,優(yōu)選地,所述處理單元包括:判斷單元,用 于判斷所述線間矢量鏈表中是否存在指定矢量,其中,所述指定矢量的右端點比所述投影矢量的左端點靠右,或者所述指定矢量與所述投影矢量重合;插入單元,用于當(dāng)存在所述指定矢量時,根據(jù)所述投影矢量和所述指定矢量的坐標(biāo)信息,將所述投影矢量插入到所述線間矢量鏈表中,當(dāng)不存在所述指定矢量時,將所述投影矢量插入到所述線間矢量鏈表的表尾處。

在該技術(shù)方案中,在將投影矢量插入到線間矢量鏈表中時,通過判斷線間矢量鏈表中矢量的右端點是否比投影矢量的左端點更靠右、或者與投影矢量重合,來確定投影矢量插入到線間矢量鏈表中的位置,從而保證線間矢量鏈表的準(zhǔn)確性,進而最大可能地發(fā)現(xiàn)可能出現(xiàn)的丟點。

在上述任一技術(shù)方案中,優(yōu)選地,所述插入單元具體用于,根據(jù)所述投影矢量的左端點相對于所述指定矢量的相對位置,確定所述投影矢量插入到所述線間矢量鏈表中的目標(biāo)位置,并在所述目標(biāo)位置處插入所述投影矢量;其中,所述相對位置包括以下之一:所述投影矢量的左端點在所述指定矢量的左端點的左邊,所述投影矢量的左端點與所述指定矢量的左端點重合,所述投影矢量的左端點位于所述指定矢量的內(nèi)部,所述投影矢量的左端點與所述指定矢量的右端點重合。

在該技術(shù)方案中,若線間矢量鏈表中指定矢量的右端點比投影矢量的左端點更靠右、或者與投影矢量重合,通過比較投影矢量的左端點相對于指定矢量的相對位置,確定投影矢量插入到線間矢量鏈表中的目標(biāo)位置,從而保證線間矢量鏈表的準(zhǔn)確性,進而最大可能地發(fā)現(xiàn)可能出現(xiàn)的丟點。

在上述任一技術(shù)方案中,優(yōu)選地,所述處理單元還包括:第二獲取單元,用于獲取所述線間矢量鏈表中的在所述投影矢量之后的且與所述投影矢量相鄰的另一矢量;第二更新單元,用于根據(jù)所述投影矢量的右端點相對所述另一矢量的位置,對所述線間矢量鏈表進行相應(yīng)的更新。

在該技術(shù)方案中,在將投影矢量插入到線間矢量鏈表之后,根據(jù)投影矢量之后的且與投影矢量相鄰的另一矢量(即線間矢量鏈表中投影矢量的下一個矢量)與該投影矢量的右端點的位置,對線間矢量鏈表進行相應(yīng)的更新。

在上述任一技術(shù)方案中,優(yōu)選地,所述第一更新單元包括:轉(zhuǎn)換單 元,用于將所述線上交點表轉(zhuǎn)換為線上交點鏈表;檢查單元,用于檢查所述線間矢量鏈表中是否存在方向值為0的結(jié)點;所述第一更新單元具體用于,若存在方向值為0的結(jié)點,判定所述方向值為0的結(jié)點對應(yīng)的矢量發(fā)生了丟點,將所述方向值為0的結(jié)點對應(yīng)的矢量的端點坐標(biāo)信息添加到所述線上交點鏈表中,對所述線上交點鏈表中結(jié)點的坐標(biāo)信息進行取整,并將取整后的坐標(biāo)信息保存至所述線上交點表中。

在該技術(shù)方案中,通過將線上交點表轉(zhuǎn)換為線上交點鏈表,使得對線上交點鏈表進行處理時更加方便,提高了數(shù)據(jù)處理的速度。然后通過依次檢查線間矢量鏈表中的結(jié)點的方向值是否為0,若方向值為0,說明方向值為0的結(jié)點對應(yīng)的矢量發(fā)生了丟點,則將該矢量的端點坐標(biāo)信息添加到線上交點鏈表中,從而避免出現(xiàn)丟點。由于線上交點表中的坐標(biāo)信息為正數(shù),因此,在將線上交點鏈表中結(jié)點的坐標(biāo)信息保存至線上交點表中之前,將結(jié)點的浮點數(shù)類型的坐標(biāo)信息轉(zhuǎn)換成整數(shù)類型的坐標(biāo)信息。

在上述任一技術(shù)方案中,優(yōu)選地,所述輸出單元包括:確定單元,用于根據(jù)所述更新后的線上交點表中的數(shù)據(jù),確定所述待填充圖形的第一類型像素和第二類型像素的起始位置、終止位置和長度;所述輸出單元具體用于,根據(jù)所述第一類型像素和所述第二類型像素的起始位置、終止位置和長度,輸出所述點陣數(shù)據(jù)。

在該技術(shù)方案中,第一類型像素和第二類型像素為黑段像素和白段像素,當(dāng)然,在顯示屏上顯示圖形時,第一類型像素和第二類型像素為亮像素和暗像素。

在上述任一技術(shù)方案中,優(yōu)選地,線上交點表和線間矢量鏈表均以線為單位。

在上述任一技術(shù)方案中,優(yōu)選地,對多個矢量進行掃描求交處理時,沿豎直方向用水平的掃描線進行掃描。

在上述任一技術(shù)方案中,優(yōu)選地,在對多個矢量進行掃描求交處理的同時動態(tài)將投影矢量插入到線間矢量鏈表中。

在上述任一技術(shù)方案中,優(yōu)選地,線間矢量鏈表使用完畢之后,清除線間矢量鏈表,以節(jié)省所占用的內(nèi)存空間。

在上述任一技術(shù)方案中,優(yōu)選地,以行為處理單位輸出點陣數(shù)據(jù)。

通過以上技術(shù)方案,利用精致與簡潔的算法和數(shù)據(jù)結(jié)構(gòu),快速而高效地發(fā)現(xiàn)可能出現(xiàn)的丟點,避免出現(xiàn)丟點,從而提高圖形的顯示效果。

附圖說明

圖1a示出了相關(guān)技術(shù)中的采用非零規(guī)則填充五角星和圓環(huán)狀路徑的效果示意圖;

圖1b示出了相關(guān)技術(shù)中的采用奇偶規(guī)則填充五角星和圓環(huán)狀路徑的效果示意圖;

圖2a示出了相關(guān)技術(shù)中的在高分辨率下填充字符“$”的效果示意圖;

圖2b示出了相關(guān)技術(shù)中的在低分辨率下采用任意相交的像素涂黑規(guī)則填充字符“$”的效果示意圖;

圖2c示出了相關(guān)技術(shù)中的在低分辨率下采用中心覆蓋的像素涂黑規(guī)則填充字符“$”的效果示意圖;

圖2d示出了相關(guān)技術(shù)中的在低分辨率下采用中心覆蓋的像素涂黑規(guī)則填充較細字符“$”的效果示意圖;

圖3示出了根據(jù)本發(fā)明的一個實施例的矢量圖形的填充方法的流程示意圖;

圖4示出了根據(jù)本發(fā)明的一個實施例的線間矢量鏈表插入方法的流程示意圖;

圖5至圖43示出了根據(jù)本發(fā)明的一個實施例的線間矢量鏈表插入過程的原理示意圖;

圖44示出了根據(jù)本發(fā)明的一個實施例的矢量圖形的填充裝置的框圖。

具體實施方式

為了能夠更清楚地理解本發(fā)明的上述目的、特征和優(yōu)點,下面結(jié)合附圖和具體實施方式對本發(fā)明進行進一步的詳細描述。需要說明的是,在不 沖突的情況下,本申請的實施例及實施例中的特征可以相互組合。

在下面的描述中闡述了很多具體細節(jié)以便于充分理解本發(fā)明,但是,本發(fā)明還可以采用其他不同于在此描述的其他方式來實施,因此,本發(fā)明的保護范圍并不受下面公開的具體實施例的限制。

圖3示出了根據(jù)本發(fā)明的一個實施例的矢量圖形的填充方法的流程示意圖。

如圖3所示,根據(jù)本發(fā)明的一個實施例的矢量圖形的填充方法,包括:

步驟302,對待填充圖形的多個矢量進行掃描求交處理,以獲取所述多個矢量的線段描述數(shù)據(jù);

步驟304,根據(jù)所述多個矢量中的與掃描線相交的矢量的所述線段描述數(shù)據(jù),生成線上交點表;

步驟306,根據(jù)所述多個矢量的所述線段描述數(shù)據(jù),得到所述多個矢量中的每個矢量的投影矢量,并將所述投影矢量插入到線間矢量鏈表中;

步驟308,根據(jù)所述線間矢量鏈表判斷是否存在丟點的矢量,并根據(jù)判斷結(jié)果對所述線上交點表進行更新;

步驟310,根據(jù)更新后的線上交點表輸出所述待填充圖形的點陣數(shù)據(jù)。

在該技術(shù)方案中,通過對待填充圖形的多個矢量進行掃描求交處理,以生成線上交點表和線間矢量鏈表,然后根據(jù)線間矢量鏈表和線上交點表輸出點陣數(shù)據(jù),從而利用精致與簡潔的算法和數(shù)據(jù)結(jié)構(gòu),快速而高效地發(fā)現(xiàn)可能出現(xiàn)的丟點,避免出現(xiàn)丟點,這樣,一方面能夠大大改善低分辨率下矢量圖形途徑的填充質(zhì)量,另一方面又不遺漏待填充圖形的任何一個矢量,從而最大限度地提高了待填充圖形在設(shè)備空間的點陣結(jié)果中呈現(xiàn)出的效果。

在上述技術(shù)方案中,優(yōu)選地,根據(jù)所述多個矢量的所述線段描述數(shù)據(jù),得到所述多個矢量中的所述每個矢量的所述投影矢量的步驟,具體包括:將所述多個矢量中的與所述掃描線相交的矢量作為非線間矢量,將所述多個矢量中的與所述掃描線不相交的矢量作為線間矢量;根據(jù)所述線間 矢量的所述線段描述數(shù)據(jù),得到所述線間矢量在豎直或水平方向的投影,并將所述線間矢量在豎直或水平方向的投影作為所述投影矢量;以及獲取所述非線間矢量被所述掃描線分割而成的矢量,根據(jù)所述非線間矢量的所述線段描述數(shù)據(jù),得到被分割而成的矢量在豎直或水平方向上的投影,并將所述被分割而成的矢量在豎直或水平方向上的投影作為所述投影矢量。

在該技術(shù)方案中,通過將線間矢量的投影作為投影矢量加入到線間矢量鏈表中,以及將非線間矢量的被掃描線分割而成的每一部分的投影作為投影矢量插入到線間矢量鏈表中,從而根據(jù)線間矢量鏈表更加準(zhǔn)確地確定是否發(fā)生丟點。

其中,若掃描線為水平方向的掃描線,將線間矢量在豎直方向的投影作為投影矢量,將被掃描線分割而成的每一部分在豎直方向的投影作為投影矢量;若掃描線為豎直方向的掃描線,將線間矢量在水平方向的投影作為投影矢量,將被掃描線分割而成的每一部分在水平方向的投影作為投影矢量。

在上述任一技術(shù)方案中,優(yōu)選地,獲取所述多個矢量的所述線段描述數(shù)據(jù)的步驟,具體包括:將所述非線間矢量與所述掃描線的交點信息記錄到與所述非線間矢量對應(yīng)的所述線段描述數(shù)據(jù)內(nèi);將所述線間矢量的端點坐標(biāo)信息記錄到與所述線間矢量對應(yīng)的所述線段描述數(shù)據(jù)內(nèi)。

在該技術(shù)方案中,非線間矢量的線段描述數(shù)據(jù)包括:非線間矢量與掃描線的交點信息,例如非線間矢量與掃描線交點的坐標(biāo)值,線間矢量的線段描述數(shù)據(jù)包括:線間矢量的端點坐標(biāo)信息。

在上述任一技術(shù)方案中,優(yōu)選地,將所述投影矢量插入到所述線間矢量鏈表中的步驟,具體包括:判斷所述線間矢量鏈表中是否存在指定矢量,其中,所述指定矢量的右端點比所述投影矢量的左端點靠右,或者所述指定矢量與所述投影矢量重合;若存在所述指定矢量,根據(jù)所述投影矢量和所述指定矢量的坐標(biāo)信息,將所述投影矢量插入到所述線間矢量鏈表中;若不存在所述指定矢量,將所述投影矢量插入到所述線間矢量鏈表的表尾處。

在該技術(shù)方案中,在將投影矢量插入到線間矢量鏈表中時,通過判斷 線間矢量鏈表中矢量的右端點是否比投影矢量的左端點更靠右、或者與投影矢量重合,來確定投影矢量插入到線間矢量鏈表中的位置,從而保證線間矢量鏈表的準(zhǔn)確性,進而最大可能地發(fā)現(xiàn)可能出現(xiàn)的丟點。

在上述任一技術(shù)方案中,優(yōu)選地,根據(jù)所述投影矢量和所述指定矢量的坐標(biāo)信息,將所述投影矢量插入到所述線間矢量鏈表中的步驟,具體包括:根據(jù)所述投影矢量的左端點相對于所述指定矢量的相對位置,確定所述投影矢量插入到所述線間矢量鏈表中的目標(biāo)位置,并在所述目標(biāo)位置處插入所述投影矢量;其中,所述相對位置包括以下之一:所述投影矢量的左端點在所述指定矢量的左端點的左邊,所述投影矢量的左端點與所述指定矢量的左端點重合,所述投影矢量的左端點位于所述指定矢量的內(nèi)部,所述投影矢量的左端點與所述指定矢量的右端點重合。

在該技術(shù)方案中,若線間矢量鏈表中指定矢量的右端點比投影矢量的左端點更靠右、或者與投影矢量重合,通過比較投影矢量的左端點相對于指定矢量的相對位置,確定投影矢量插入到線間矢量鏈表中的目標(biāo)位置,從而保證線間矢量鏈表的準(zhǔn)確性,進而最大可能地發(fā)現(xiàn)可能出現(xiàn)的丟點。

在上述任一技術(shù)方案中,優(yōu)選地,將所述投影矢量插入到所述線間矢量鏈表中的步驟之后,包括:獲取所述線間矢量鏈表中的在所述投影矢量之后的且與所述投影矢量相鄰的另一矢量;根據(jù)所述投影矢量的右端點相對所述另一矢量的位置,對所述線間矢量鏈表進行相應(yīng)的更新。

在該技術(shù)方案中,在將投影矢量插入到線間矢量鏈表之后,根據(jù)投影矢量之后的且與投影矢量相鄰的另一矢量(即線間矢量鏈表中投影矢量的下一個矢量)與該投影矢量的右端點的位置,對線間矢量鏈表進行相應(yīng)的更新。

在上述任一技術(shù)方案中,優(yōu)選地,步驟308具體包括:將所述線上交點表轉(zhuǎn)換為線上交點鏈表;檢查所述線間矢量鏈表中是否存在方向值為0的結(jié)點;若存在方向值為0的結(jié)點,判定所述方向值為0的結(jié)點對應(yīng)的矢量發(fā)生了丟點,將所述方向值為0的結(jié)點對應(yīng)的矢量的端點坐標(biāo)信息添加到所述線上交點鏈表中;對所述線上交點鏈表中結(jié)點的坐標(biāo)信息進行取整,并將取整后的坐標(biāo)信息保存至所述線上交點表中。

在該技術(shù)方案中,通過將線上交點表轉(zhuǎn)換為線上交點鏈表,使得對線上交點鏈表進行處理時更加方便,提高了數(shù)據(jù)處理的速度。然后通過依次檢查線間矢量鏈表中的結(jié)點的方向值是否為0,若方向值為0,說明方向值為0的結(jié)點對應(yīng)的矢量發(fā)生了丟點,則將該矢量的端點坐標(biāo)信息添加到線上交點鏈表中,從而避免出現(xiàn)丟點。由于線上交點表中的坐標(biāo)信息為正數(shù),因此,在將線上交點鏈表中結(jié)點的坐標(biāo)信息保存至線上交點表中之前,將結(jié)點的浮點數(shù)類型的坐標(biāo)信息轉(zhuǎn)換成整數(shù)類型的坐標(biāo)信息。

下面詳細說明上述技術(shù)方案:

對線上交點表中的數(shù)據(jù)根據(jù)交點坐標(biāo)值(交點坐標(biāo)信息)進行排序,同時根據(jù)纏繞規(guī)則確定出每個交點的黑白段類型。纏繞規(guī)則包括但不限于:非零規(guī)則和奇偶規(guī)則,根據(jù)纏繞規(guī)則可以確定線上交點表中的每個交點為內(nèi)部點還是外部點,其中,內(nèi)部點表示黑段類型,外部點表示白段類型;

將線上交點表轉(zhuǎn)換為線上交點鏈表,依次檢查線間矢量鏈表中的結(jié)點,若存在方向值為0的線間矢量,說明發(fā)生了豎直方向上的丟點,將其端點坐標(biāo)加入線上交點鏈表,具體過程如下:

(1)若當(dāng)前線上交點表為空,且之前為白段類型,則將當(dāng)前線間矢量鏈表中的丟點線段以黑段形式直接加入當(dāng)前線上交點表中,結(jié)束處理。

(2)否則,將當(dāng)前線上交點表轉(zhuǎn)換為線上交點鏈表,對線間矢量鏈表作如下循環(huán)處理:

(2.1)取線間矢量鏈表中的下一個丟點線段d(dl,dr);

(2.2)到線上交點鏈表中找到水平坐標(biāo)不大于dl的最大結(jié)點l(xl,cl),將線上交點鏈表的當(dāng)前指針設(shè)置為l的下一個結(jié)點;

(2.3)到線上交點鏈表中找到水平坐標(biāo)不大于dr的最大結(jié)點r(xr,cr),將線上交點鏈表的當(dāng)前指針設(shè)置為r的下一個結(jié)點;

(2.4)若xl等于dl,此時無需新增結(jié)點,只需將l結(jié)點的黑白類型修改為黑;否則,在線上交點鏈表中l(wèi)結(jié)點之后插入新結(jié)點nl(dl,黑);

(2.5)若l等于r,則在線上交點鏈表中xnl結(jié)點之后插入新結(jié)點nr(dr,cr);否則:

(2.5.1)若xr等于dr,此時無需新增結(jié)點,維持r結(jié)點不變;否則,將r結(jié)點修改為nr(dr,cr),即令xr為dr;

(2.5.2)刪除線上交點鏈表中從l到r之間(不包含端點)的結(jié)點;

對線上交點鏈表中的數(shù)據(jù)進行轉(zhuǎn)換,將浮點數(shù)類型的坐標(biāo)值取整轉(zhuǎn)換為整數(shù)類型的坐標(biāo)值,并在轉(zhuǎn)換的同時判斷出其中存在的水平方向上的丟點線段,根據(jù)相鄰線段的填充情況對其進行彌補,將轉(zhuǎn)換之后的結(jié)果保存回線上交點表,具體過程如下:

(1)對線上交點鏈表作如下循環(huán)處理:

(1.1)若線上交點鏈表的任一結(jié)點的黑白段類型與任一結(jié)點的上一個結(jié)點的黑白段類型相同,則丟棄此結(jié)點,不再保存到線上交點表中;

(1.2)若任一結(jié)點是黑點,則:

(1.2.1)丟棄任一結(jié)點之后的黑點,直至找到任一結(jié)點之后的下一個白點;

(1.2.2)若任一結(jié)點與其之后的下一個白點位于同一個設(shè)備像素之內(nèi),說明發(fā)生了水平方向上的黑色丟點,則彌補該丟點,將任一結(jié)點的坐標(biāo)值取整后保存到線上交點表中;

(1.2.3)否則,進行非黑色丟點線段的坐標(biāo)值取整轉(zhuǎn)換,保存到線上交點表中;

(1.3)否則(即任一結(jié)點是白點的情況):

(1.3.1)丟棄任一結(jié)點之后的白點,直至找到任一結(jié)點之后的下一個黑點;

(1.3.2)若任一結(jié)點與其之后的下一個黑點位于同一個設(shè)備像素之內(nèi),說明發(fā)生了水平方向上的白色丟點,則丟棄該丟點,不再保存到線上交點表中;

(1.3.3)否則,進行非白色丟點線段的坐標(biāo)值取整轉(zhuǎn)換,保存到線上交點表中。

在上述任一技術(shù)方案中,優(yōu)選地,步驟310具體包括:根據(jù)所述更新后的線上交點表中的數(shù)據(jù),確定所述待填充圖形的第一類型像素和第二類型像素的起始位置、終止位置和長度;根據(jù)所述第一類型像素和所述第二 類型像素的起始位置、終止位置和長度,輸出所述點陣數(shù)據(jù)。

在該技術(shù)方案中,第一類型像素和第二類型像素為黑段像素和白段像素,當(dāng)然,在顯示屏上顯示圖形時,第一類型像素和第二類型像素為亮像素和暗像素。

在上述任一技術(shù)方案中,優(yōu)選地,線上交點表和線間矢量鏈表均以線為單位。

在上述任一技術(shù)方案中,優(yōu)選地,對多個矢量進行掃描求交處理時,沿豎直方向用水平的掃描線進行掃描。

在上述任一技術(shù)方案中,優(yōu)選地,在對多個矢量進行掃描求交處理的同時動態(tài)將投影矢量插入到線間矢量鏈表中。

在上述任一技術(shù)方案中,優(yōu)選地,線間矢量鏈表使用完畢之后,清除線間矢量鏈表,以節(jié)省所占用的內(nèi)存空間。

在上述任一技術(shù)方案中,優(yōu)選地,以行為處理單位輸出點陣數(shù)據(jù)。

圖4示出了根據(jù)本發(fā)明的一個實施例的線間矢量鏈表插入方法的流程示意圖;圖5至圖43示出了根據(jù)本發(fā)明的一個實施例的線間矢量鏈表插入過程的原理示意圖。

如圖4所示,根據(jù)本發(fā)明的一個實施例的線間矢量鏈表插入方法,在該實施例中,將投影矢量vn(pnl,pnr,dn)插入到線間矢量鏈表中,投影矢量的左端點坐標(biāo)為pnl、右端點坐標(biāo)為pnr、方向值為dn(取值為+1或者-1),將vn插入到線間矢量鏈表的具體過程包括:

步驟402,判斷是否存在線間矢量鏈表?在判斷結(jié)果為是時,進入步驟404,否則,進入步驟406;

步驟404,若存在線間矢量鏈表,從線間矢量鏈表中依次讀取矢量,查找右端點比vn左端點更靠右邊或者重合的矢量v1(pll,plr,dl);

步驟406,若不存在線間矢量鏈表,創(chuàng)建線間矢量鏈表vbll,將vn直接插入到創(chuàng)建的線間矢量鏈表中;

步驟408,判斷v1是否存在?在判斷結(jié)果為是時,進入步驟412,否則,進入步驟410;

步驟410,若v1不存在,說明vn比當(dāng)前線間矢量鏈表vbll中所 有矢量都更靠右邊且不相交,則將vn插入到線間矢量鏈表的表尾處,如圖5所示;

步驟412,根據(jù)vn左端點與v1的位置關(guān)系進行相應(yīng)處理,分以下情況處理:

(1.1)若pnl<pll,即vn左端點在vl左端點的左邊,此時又分以下情況處理:

(1.1.1)pnr<pll,即vn右端點在vl左端點的左邊,此時vn完全位于vl左邊且不相交,則新增矢量vnn(pnl,pnr,dn),插入線間矢量鏈表vbll中vl之前的位置,結(jié)束處理(如圖6所示);

(1.1.2)pnr=pll,即vn右端點與vl左端點重合:

(1.1.2.1)若dn=dl,說明兩者可以合并,則令pll為pnl,其余不變,結(jié)束處理(如圖7所示);

(1.1.2.2)否則,新增矢量vnn(pnl,pnr,dn),插入線間矢量鏈表vbll中vl之前的位置,結(jié)束處理(如圖8所示);

(1.1.3)pll<pnr<plr,即vn右端點位于vl內(nèi)部:

(1.1.3.1)若dl=0,則新增矢量vnn(pnl,pnr,dn),插入線間矢量鏈表vbll中vl之前的位置;令pll為pnr,結(jié)束處理(如圖9所示);

(1.1.3.2)否則,新增矢量vnnl(pnl,pll,dn)和vnnr(pll,pnr,dl+dn),依次插入線間矢量鏈表vbll中vl之前的位置;令pll為pnr,結(jié)束處理(如圖10所示);

(1.1.4)pnr=plr,即vn右端點與vl右端點重合:

(1.1.4.1)若vl的下一個矢量vm(pml,pmr,dm)存在,且plr=pml,dm=dl+dn,說明計算方向值之后的vl和vm可以合并,則令pml為pll;令plr為pll,pll為pnl,dl為dn,結(jié)束處理(如圖11所示);

(1.1.4.2)否則,若dl=0,則令pll為pnl,dl為dn,結(jié)束處理(如圖12所示);

(1.1.4.3)否則,新增矢量vnn(pnl,pll,dn),插入線間矢量鏈表vbll中vl之前的位置,令dl為dl+dn;結(jié)束處理(如圖13所示);

(1.1.5)pnr>plr,即vn右端點在vl右端點的右邊:

(1.1.5.1)若dl=0,則令pll為pnl,dl為dn;設(shè)置處理未結(jié)束標(biāo)志(如圖14所示);

(1.1.5.2)否則,新增矢量vnn(pnl,pll,dn),插入線間矢量鏈表vbll中vl之前的位置,令dl為dl+dn;設(shè)置處理未結(jié)束標(biāo)志(如圖15所示)。

(1.2)pnl=pll,即vn左端點與vl左端點重合,此時又分以下情況處理:

(1.2.1)pll<pnr<plr,即vn右端點位于vl內(nèi)部:

(1.2.1.1)若vl的上一個矢量vk(pkl,pkr,dk)存在且pkr=pll且dk=dl+dn,說明計算方向值之后的vl和vk可以部分合并,則令pkr為pnr;令pll為pnr,結(jié)束處理(如圖16所示);

(1.2.1.2)否則,新增矢量vnn(pnl,pnr,dl+dn),插入線間矢量鏈表vbll中vl之前的位置,令pll為pnr,結(jié)束處理(如圖17所示)。

(1.2.2)pnr=plr,即vn右端點與vl右端點重合,此時只需計算方向值,同時檢查是否可以與前后相鄰的矢量合并:

(1.2.2.1)若vl的上一個矢量vk(pkl,pkr,dk)存在且pkr=pll且dk=dl+dn,說明計算方向值之后的vl和vk可以合并,則令pll為pkl,令dl為dk,從線間矢量鏈表vbll中刪除vk;結(jié)束處理(如圖18所示);

(1.2.2.2)若vl的下一個矢量vm(pml,pmr,dm)存在且plr=pml且dm=dl+dn,說明計算方向值之后的vl和vm可以合并,則令plr為pmr,令dl為dm,從當(dāng)前線間矢量鏈表vbll中刪除vm,結(jié)束處理(如圖19所示);

(1.2.2.3)若不滿足上述兩種情況,說明計算方向值之后的vl與前后相鄰的矢量不可合并,則令dl為dl+dn,結(jié)束處理(如圖20所示);

(1.2.3)pnr>plr,即vn右端點在vl右端點的右邊:

(1.2.3.1)若vl的上一個矢量vk(pkl,pkr,dk)存在且pkr=pll且dk=dl+dn,說明計算方向值之后的vl和vk可以合并,則令pll為pkl,令dl為dk,從當(dāng)前線間矢量鏈表vbll中刪除vk;設(shè)置處理未結(jié)束標(biāo) 志(如圖21所示);

(1.2.3.2)否則,令dl為dl+dn;設(shè)置處理未結(jié)束標(biāo)志(如圖22所示);

(1.3)pll<pnl<plr,即vn左端點位于vl內(nèi)部,此時又分以下情況處理:

(1.3.1)pnr<plr,即vn右端點也位于vl內(nèi)部,此時vn完全位于vl內(nèi)部,則新增矢量vnnl(pll,pnl,dl)和vnnr(pnl,pnr,dl+dn),依次插入線間矢量鏈表vbll中vl之前的位置,令pll為pnr,結(jié)束處理(如圖23所示);

(1.3.2)pnr=plr,即vn右端點與vl右端點重合:

(1.3.2.1)若vl的下一個矢量vm(pml,pmr,dm)存在且plr=pml且dm=dl+dn,說明計算方向值之后的vl和vm可以部分合并,則令plr為pnl,令pml為pnl,結(jié)束處理(如圖24所示);

(1.3.2.2)否則,新增矢量vnn(pll,pnl,dl),插入線間矢量鏈表vbll中vl之前的位置,令pll為pnl,dl為dl+dn,結(jié)束處理(如圖25所示);

(1.3.3)pnr>plr,即vn右端點在vl右端點的右邊,則新增矢量vnn(pll,pnl,dl),插入當(dāng)前線間矢量鏈表vbll中vl之前的位置,令pll為pnl,dl為dl+dn,設(shè)置處理未結(jié)束標(biāo)志(如圖26所示);

(1.4)pnl=plr,即vn左端點與vl右端點重合,此時又分以下情況處理:

(1.4.1)若vl的下一個矢量vm(pml,pmr,dm)不存在,說明vl是當(dāng)前線間矢量鏈表vbll表尾:

(1.4.1.1)若dn=dl,說明兩者可以合并,則令plr為pnr,結(jié)束處理(如圖27所示);

(1.4.1.2)否則,新增矢量vnn(pnl,pnr,dn),插入線間矢量鏈表vbll表尾,結(jié)束處理(如圖28所示);

(1.4.2)否則,分以下情況處理:

(1.4.2.1)pnl=pml:說明vn左端點與vm左端點重合,則可將vm視 為vl,采用與(d.2)類似的方式進行處理(如圖29所示);

(1.4.2.2)pnl<pml:說明vn左端點在vm左端點的左邊,則可將vm視為vl,采用與(d.1)類似的方式進行處理(如圖30所示);

步驟414,判斷v1的下一個矢量vm存在且處理未結(jié)束?在判斷結(jié)果為是時,進入步驟416,否則進入步驟418;

步驟416,根據(jù)vn左端點與v1及vm的位置關(guān)系進行相應(yīng)處理,具體處理過程如下:

(2.1)若pnr<pml,即vn右端點在vm左端點的左邊,則:

(2.1.1)若dn=dl,則令plr為pnr,結(jié)束處理(如圖31所示)。

(2.1.2)否則,新增矢量vnn(plr,pnr,dn),插入線間矢量鏈表vbll中vm之前的位置,結(jié)束處理(如圖32所示)。

(2.2)否則:

(2.2.1)處理vn中間途經(jīng)的矢量,根據(jù)方向值或合并或新增矢量,具體過程如下:

(2.2.1.1)若plr<pml,則:

(2.2.1.1.1)若dn=dl,則令plr為pml(如圖33所示);

(2.2.1.1.2)否則,新增矢量vnn(plr,pml,dn),插入線間矢量鏈表vbll中vm之前的位置(如圖34所示);

(2.2.1.2)令vl為vm的上一個矢量;

(2.2.2)分以下情況處理:

(2.2.2.1)pnr=pml,即vn右端點與vm左端點重合:

(2.2.2.1.1)若dl=dm,說明更新之后的vl和vm可以合并,則令pml為pll,從線間矢量鏈表vbll中刪除vl(如圖35所示);

(2.2.2.1.2)結(jié)束處理,對于未作合并的情況,如圖36所示;

(2.2.2.2)pml<pnr<pmr,即vn右端點位于vm內(nèi)部:

(2.2.2.2.1)若dl=dm+dn,說明計算方向值之后的vl和vm可以部分合并,則令plr為pnr;令pml為pnr;結(jié)束處理(如圖37所示)。

(2.2.2.2.2)否則,新增矢量vnnr(pml,pnr,dm+dn),插入線間矢量鏈表vbll中vm之前的位置,令pml為pnr,結(jié)束處理(如圖38所 示);

(2.2.2.3)pnr=pmr,即vn右端點與vm右端點重合:

(2.2.2.3.1)若dl=dm+dn,說明計算方向值之后的vl和vm可以合并,則令pml為pll,從線間矢量鏈表vbll中刪除vl(如圖39所示);

(2.2.2.3.2)若vm的下一個矢量vs存在且pmr=psl且ds=dm+dn,說明計算方向值之后的vm和vs可以合并,則令pmr為psr,從線間矢量鏈表vbll中刪除vs(如圖40所示);

(2.2.2.3.3)修改vm的方向值,令dm為dm+dn,結(jié)束處理,對于未作合并的情況,如圖41所示;

(2.2.2.4)pnr>pmr,即vn右端點在vm右端點的右邊,此時vm完全位于vn內(nèi)部:

(2.2.2.4.1)若dl=dm+dn,說明計算方向值之后的vl和vm可以合并,則令pml為pll,從線間矢量鏈表vbll中刪除vl(如圖42所示);

(2.2.2.4.2)修改vm的方向值,令dm為dm+dn,設(shè)置處理未結(jié)束標(biāo)志,對于未作合并的情況,如圖43所示。

步驟418,若處理未結(jié)束,將vn合并插入線間矢量鏈表vbll表尾,結(jié)束處理。

圖44示出了根據(jù)本發(fā)明的一個實施例的矢量圖形的填充裝置的框圖。

如圖44所示,根據(jù)本發(fā)明的一個實施例的矢量圖形的填充裝置4400,包括:第一獲取單元4402、生成單元4404、處理單元4406、第一更新單元4408和輸出單元4410,其中,第一獲取單元4402用于對待填充圖形的多個矢量進行掃描求交處理,以獲取所述多個矢量的線段描述數(shù)據(jù);生成單元4404,用于根據(jù)所述多個矢量中的與掃描線相交的矢量的所述線段描述數(shù)據(jù),生成線上交點表;處理單元4406,用于根據(jù)所述多個矢量的所述線段描述數(shù)據(jù),得到所述多個矢量中的每個矢量的投影矢量,并將所述投影矢量插入到線間矢量鏈表中;第一更新單元4408,用 于根據(jù)所述線間矢量鏈表判斷是否存在丟點的矢量,并根據(jù)判斷結(jié)果對所述線上交點表進行更新;輸出單元4410,用于根據(jù)更新后的線上交點表輸出所述待填充圖形的點陣數(shù)據(jù)。

在該技術(shù)方案中,通過對待填充圖形的多個矢量進行掃描求交處理,以生成線上交點表和線間矢量鏈表,然后根據(jù)線間矢量鏈表和線上交點表輸出點陣數(shù)據(jù),從而利用精致與簡潔的算法和數(shù)據(jù)結(jié)構(gòu),快速而高效地發(fā)現(xiàn)可能出現(xiàn)的丟點,避免出現(xiàn)丟點,這樣,一方面能夠大大改善低分辨率下矢量圖形途徑的填充質(zhì)量,另一方面又不遺漏待填充圖形的任何一個矢量,從而最大限度地提高了待填充圖形在設(shè)備空間的點陣結(jié)果中呈現(xiàn)出的效果。

在上述技術(shù)方案中,優(yōu)選地,所述處理單元4406具體用于,將所述多個矢量中的與所述掃描線相交的矢量作為非線間矢量,將所述多個矢量中的與所述掃描線不相交的矢量作為線間矢量,根據(jù)所述線間矢量的所述線段描述數(shù)據(jù),得到所述線間矢量在豎直或水平方向的投影,并將所述線間矢量在豎直或水平方向的投影作為所述投影矢量,以及獲取所述非線間矢量被所述掃描線分割而成的矢量,根據(jù)所述非線間矢量的所述線段描述數(shù)據(jù),得到被分割而成的矢量在豎直或水平方向上的投影,并將所述被分割而成的矢量在豎直或水平方向上的投影作為所述投影矢量。

在該技術(shù)方案中,通過將線間矢量的投影作為投影矢量加入到線間矢量鏈表中,以及將非線間矢量的被掃描線分割而成的每一部分的投影作為投影矢量插入到線間矢量鏈表中,從而根據(jù)線間矢量鏈表更加準(zhǔn)確地確定是否發(fā)生丟點。

其中,若掃描線為水平方向的掃描線,將線間矢量在豎直方向的投影作為投影矢量,將被掃描線分割而成的每一部分在豎直方向的投影作為投影矢量;若掃描線為豎直方向的掃描線,將線間矢量在水平方向的投影作為投影矢量,將被掃描線分割而成的每一部分在水平方向的投影作為投影矢量。

在上述任一技術(shù)方案中,優(yōu)選地,所述第一獲取單元4402包括:存儲單元44022,用于將所述非線間矢量與所述掃描線的交點信息記錄到與 所述非線間矢量對應(yīng)的所述線段描述數(shù)據(jù)內(nèi),以及將所述線間矢量的端點坐標(biāo)信息記錄到與所述線間矢量對應(yīng)的所述線段描述數(shù)據(jù)內(nèi)。

在該技術(shù)方案中,非線間矢量的線段描述數(shù)據(jù)包括:非線間矢量與掃描線的交點信息,例如非線間矢量與掃描線交點的坐標(biāo)值,線間矢量的線段描述數(shù)據(jù)包括:線間矢量的端點坐標(biāo)信息。

在上述任一技術(shù)方案中,優(yōu)選地,所述處理單元4406包括:判斷單元44062,用于判斷所述線間矢量鏈表中是否存在指定矢量,其中,所述指定矢量的右端點比所述投影矢量的左端點靠右,或者所述指定矢量與所述投影矢量重合;插入單元44064,用于當(dāng)存在所述指定矢量時,根據(jù)所述投影矢量和所述指定矢量的坐標(biāo)信息,將所述投影矢量插入到所述線間矢量鏈表中,當(dāng)不存在所述指定矢量時,將所述投影矢量插入到所述線間矢量鏈表的表尾處。

在該技術(shù)方案中,在將投影矢量插入到線間矢量鏈表中時,通過判斷線間矢量鏈表中矢量的右端點是否比投影矢量的左端點更靠右、或者與投影矢量重合,來確定投影矢量插入到線間矢量鏈表中的位置,從而保證線間矢量鏈表的準(zhǔn)確性,進而最大可能地發(fā)現(xiàn)可能出現(xiàn)的丟點。

在上述任一技術(shù)方案中,優(yōu)選地,所述插入單元44064具體用于,根據(jù)所述投影矢量的左端點相對于所述指定矢量的相對位置,確定所述投影矢量插入到所述線間矢量鏈表中的目標(biāo)位置,并在所述目標(biāo)位置處插入所述投影矢量;其中,所述相對位置包括以下之一:所述投影矢量的左端點在所述指定矢量的左端點的左邊,所述投影矢量的左端點與所述指定矢量的左端點重合,所述投影矢量的左端點位于所述指定矢量的內(nèi)部,所述投影矢量的左端點與所述指定矢量的右端點重合。

在該技術(shù)方案中,若線間矢量鏈表中指定矢量的右端點比投影矢量的左端點更靠右、或者與投影矢量重合,通過比較投影矢量的左端點相對于指定矢量的相對位置,確定投影矢量插入到線間矢量鏈表中的目標(biāo)位置,從而保證線間矢量鏈表的準(zhǔn)確性,進而最大可能地發(fā)現(xiàn)可能出現(xiàn)的丟點。

在上述任一技術(shù)方案中,優(yōu)選地,所述處理單元4406還包括:第二獲取單元44066,用于獲取所述線間矢量鏈表中的在所述投影矢量之后的 且與所述投影矢量相鄰的另一矢量;第二更新單元44068,用于根據(jù)所述投影矢量的右端點相對所述另一矢量的位置,對所述線間矢量鏈表進行相應(yīng)的更新。

在該技術(shù)方案中,在將投影矢量插入到線間矢量鏈表之后,根據(jù)投影矢量之后的且與投影矢量相鄰的另一矢量(即線間矢量鏈表中投影矢量的下一個矢量)與該投影矢量的右端點的位置,對線間矢量鏈表進行相應(yīng)的更新。

在上述任一技術(shù)方案中,優(yōu)選地,所述第一更新單元4408包括:轉(zhuǎn)換單元44082,用于將所述線上交點表轉(zhuǎn)換為線上交點鏈表;檢查單元44084,用于檢查所述線間矢量鏈表中是否存在方向值為0的結(jié)點;所述第一更新單元4408具體用于,若存在方向值為0的結(jié)點,判定所述方向值為0的結(jié)點對應(yīng)的矢量發(fā)生了丟點,將所述方向值為0的結(jié)點對應(yīng)的矢量的端點坐標(biāo)信息添加到所述線上交點鏈表中,對所述線上交點鏈表中結(jié)點的坐標(biāo)信息進行取整,并將取整后的坐標(biāo)信息保存至所述線上交點表中。

在該技術(shù)方案中,通過將線上交點表轉(zhuǎn)換為線上交點鏈表,使得對線上交點鏈表進行處理時更加方便,提高了數(shù)據(jù)處理的速度。然后通過依次檢查線間矢量鏈表中的結(jié)點的方向值是否為0,若方向值為0,說明方向值為0的結(jié)點對應(yīng)的矢量發(fā)生了丟點,則將該矢量的端點坐標(biāo)信息添加到線上交點鏈表中,從而避免出現(xiàn)丟點。由于線上交點表中的坐標(biāo)信息為正數(shù),因此,在將線上交點鏈表中結(jié)點的坐標(biāo)信息保存至線上交點表中之前,將結(jié)點的浮點數(shù)類型的坐標(biāo)信息轉(zhuǎn)換成整數(shù)類型的坐標(biāo)信息。

下面詳細說明上述技術(shù)方案:

對線上交點表中的數(shù)據(jù)根據(jù)交點坐標(biāo)值(交點坐標(biāo)信息)進行排序,同時根據(jù)纏繞規(guī)則確定出每個交點的黑白段類型。纏繞規(guī)則包括但不限于:非零規(guī)則和奇偶規(guī)則,根據(jù)纏繞規(guī)則可以確定線上交點表中的每個交點為內(nèi)部點還是外部點,其中,內(nèi)部點表示黑段類型,外部點表示白段類型;

將線上交點表轉(zhuǎn)換為線上交點鏈表,依次檢查線間矢量鏈表中的結(jié) 點,若存在方向值為0的線間矢量,說明發(fā)生了豎直方向上的丟點,將其端點坐標(biāo)加入線上交點鏈表,具體過程如下:

(1)若當(dāng)前線上交點表為空,且之前為白段類型,則將當(dāng)前線間矢量鏈表中的丟點線段以黑段形式直接加入當(dāng)前線上交點表中,結(jié)束處理。

(2)否則,將當(dāng)前線上交點表轉(zhuǎn)換為線上交點鏈表,對線間矢量鏈表作如下循環(huán)處理:

(2.1)取線間矢量鏈表中的下一個丟點線段d(dl,dr);

(2.2)到線上交點鏈表中找到水平坐標(biāo)不大于dl的最大結(jié)點l(xl,cl),將線上交點鏈表的當(dāng)前指針設(shè)置為l的下一個結(jié)點;

(2.3)到線上交點鏈表中找到水平坐標(biāo)不大于dr的最大結(jié)點r(xr,cr),將線上交點鏈表的當(dāng)前指針設(shè)置為r的下一個結(jié)點;

(2.4)若xl等于dl,此時無需新增結(jié)點,只需將l結(jié)點的黑白類型修改為黑;否則,在線上交點鏈表中l(wèi)結(jié)點之后插入新結(jié)點nl(dl,黑);

(2.5)若l等于r,則在線上交點鏈表中xnl結(jié)點之后插入新結(jié)點nr(dr,cr);否則:

(2.5.1)若xr等于dr,此時無需新增結(jié)點,維持r結(jié)點不變;否則,將r結(jié)點修改為nr(dr,cr),即令xr為dr;

(2.5.2)刪除線上交點鏈表中從l到r之間(不包含端點)的結(jié)點;

對線上交點鏈表中的數(shù)據(jù)進行轉(zhuǎn)換,將浮點數(shù)類型的坐標(biāo)值取整轉(zhuǎn)換為整數(shù)類型的坐標(biāo)值,并在轉(zhuǎn)換的同時判斷出其中存在的水平方向上的丟點線段,根據(jù)相鄰線段的填充情況對其進行彌補,將轉(zhuǎn)換之后的結(jié)果保存回線上交點表,具體過程如下:

(1)對線上交點鏈表作如下循環(huán)處理:

(1.1)若線上交點鏈表的任一結(jié)點的黑白段類型與任一結(jié)點的上一個結(jié)點的黑白段類型相同,則丟棄此結(jié)點,不再保存到線上交點表中;

(1.2)若任一結(jié)點是黑點,則:

(1.2.1)丟棄任一結(jié)點之后的黑點,直至找到任一結(jié)點之后的下一個白點;

(1.2.2)若任一結(jié)點與其之后的下一個白點位于同一個設(shè)備像素之內(nèi), 說明發(fā)生了水平方向上的黑色丟點,則彌補該丟點,將任一結(jié)點的坐標(biāo)值取整后保存到線上交點表中;

(1.2.3)否則,進行非黑色丟點線段的坐標(biāo)值取整轉(zhuǎn)換,保存到線上交點表中;

(1.3)否則(即任一結(jié)點是白點的情況):

(1.3.1)丟棄任一結(jié)點之后的白點,直至找到任一結(jié)點之后的下一個黑點;

(1.3.2)若任一結(jié)點與其之后的下一個黑點位于同一個設(shè)備像素之內(nèi),說明發(fā)生了水平方向上的白色丟點,則丟棄該丟點,不再保存到線上交點表中;

(1.3.3)否則,進行非白色丟點線段的坐標(biāo)值取整轉(zhuǎn)換,保存到線上交點表中。

在上述任一技術(shù)方案中,優(yōu)選地,所述輸出單元4410包括:確定單元44102,用于根據(jù)所述更新后的線上交點表中的數(shù)據(jù),確定所述待填充圖形的第一類型像素和第二類型像素的起始位置、終止位置和長度;所述輸出單元4410具體用于,根據(jù)所述第一類型像素和所述第二類型像素的起始位置、終止位置和長度,輸出所述點陣數(shù)據(jù)。

在該技術(shù)方案中,第一類型像素和第二類型像素為黑段像素和白段像素,當(dāng)然,在顯示屏上顯示圖形時,第一類型像素和第二類型像素為亮像素和暗像素。

在上述任一技術(shù)方案中,優(yōu)選地,線上交點表和線間矢量鏈表均以線為單位。

在上述任一技術(shù)方案中,優(yōu)選地,對多個矢量進行掃描求交處理時,沿豎直方向用水平的掃描線進行掃描。

在上述任一技術(shù)方案中,優(yōu)選地,在對多個矢量進行掃描求交處理的同時動態(tài)將投影矢量插入到線間矢量鏈表中。

在上述任一技術(shù)方案中,優(yōu)選地,線間矢量鏈表使用完畢之后,清除線間矢量鏈表,以節(jié)省所占用的內(nèi)存空間。

在上述任一技術(shù)方案中,優(yōu)選地,以行為處理單位輸出點陣數(shù)據(jù)。

以上結(jié)合附圖詳細說明了本發(fā)明的技術(shù)方案,通過本發(fā)明的技術(shù)方案,利用精致與簡潔的算法和數(shù)據(jù)結(jié)構(gòu),快速而高效地發(fā)現(xiàn)可能出現(xiàn)的丟點,避免出現(xiàn)丟點,從而提高圖形的顯示效果。

以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1