本發(fā)明涉及圖像處理領域,具體涉及一種基于opengl?sc的圖形填充方法、系統(tǒng)及設備。
背景技術:
1、圖形填充是計算機圖形學中的一項基礎技術,指將封閉圖形的內(nèi)部區(qū)域填充為指定顏色或圖案的過程。它在圖形渲染、圖像處理、地理信息系統(tǒng)、游戲開發(fā)等領域具有廣泛應用。例如,在圖形界面設計中,圖形填充用于繪制按鈕、圖標等界面元素;在游戲開發(fā)中,用于填充角色、場景等物體的顏色;在地理信息系統(tǒng)中,用于繪制地圖區(qū)域。高效、準確的圖形填充算法能夠顯著提升圖形渲染的質量和性能,是計算機圖形學中不可或缺的核心技術之一。
2、目前,常用的圖形填充算法包括注入填充算法等。注入填充算法從一個內(nèi)部點開始,通過遞歸或迭代的方式向外擴展,將所有相連的像素點填充為目標顏色。雖然該算法簡單易懂且實現(xiàn)容易,但其存在明顯的缺點:注入填充算法通常依賴遞歸調用,在處理大型區(qū)域時可能導致棧溢出,特別是在嵌入式系統(tǒng)或安全關鍵領域(如航空電子、汽車電子)中,這種不穩(wěn)定性是不可接受的。
技術實現(xiàn)思路
1、為解決上述問題,本發(fā)明提供一種基于opengl?sc的圖形填充方法、系統(tǒng)及設備。
2、本發(fā)明第一方面公開了一種基于opengl?sc的圖形填充方法,包括:
3、接收圖形填充請求,所述圖形填充請求包括目標顏色及待填充圖形的所有特征頂點的坐標;
4、根據(jù)所有所述特征頂點的坐標,計算目標斜率;
5、根據(jù)所述目標斜率,生成多條預設寬度的虛擬的掃描線,以覆蓋所述待填充圖形;
6、計算各個所述掃描線與所述待填充圖形的交點,確定與所述待填充圖形相關的各個掃描線段;
7、基于opengl?sc接口,將目標顏色填充至每一個掃描線段中,以完成所述待填充圖形的填充。
8、進一步的,根據(jù)所有所述特征頂點的坐標,計算目標斜率的步驟包括:
9、根據(jù)所有所述特征頂點的坐標,使用旋轉卡殼算法,計算所述待填充圖形的最小外接矩形;
10、計算所述最小外接矩形的長邊的斜率,得到目標斜率。
11、進一步的,根據(jù)所述目標斜率,生成多條預設寬度的虛擬的掃描線的步驟包括:
12、基于所述目標斜率,計算所述待填充圖形的最小邊界坐標和最大邊界坐標;
13、生成從所述最小邊界坐標到所述最大邊界坐標的虛擬線段,得到標定線段;
14、對于所述標定線段中的每個像素點,根據(jù)所述目標斜率,生成與所述像素點相交的預設寬度的掃描線。
15、進一步的,所述圖形填充請求還包括每個特征頂點與其相鄰特征頂點的角度差;其中,所述角度差表示所述特征頂點與其相鄰的特征頂點之間的連線的弧度;
16、以及,計算各個所述掃描線與所述待填充圖形的交點的步驟包括:
17、根據(jù)所述角度差,確定所述待填充圖形的每條邊的線段類型;
18、對于每條所述掃描線:
19、根據(jù)每條邊的線段類型,計算該邊與該掃描線的交點,并從中過濾掉所述特征頂點,得到該掃描線與所述待填充圖形的交點。
20、進一步的,根據(jù)所述角度差,確定所述待填充圖形的每條邊的線段類型的步驟包括:
21、判斷每個角度差是否為預設的直線角度差:
22、若是,則確定所述角度差對應的兩個特征頂點對應的待填充圖形的邊的線段類型為直線線段;
23、若否,則確定所述角度差對應的兩個特征頂點對應的待填充圖形的邊的線段類型為弧線線段。
24、進一步的,當線段類型為直線線段時,根據(jù)每條邊的線段類型,計算該邊與該掃描線的交點的步驟包括:
25、基于該邊對應的兩個特征頂點的坐標,根據(jù)線性插值法計算該邊與該掃描線的交點。
26、進一步的,當線段類型為弧線線段時,根據(jù)每條邊的線段類型,計算該邊與該掃描線的交點的步驟包括:
27、根據(jù)該邊對應的兩個特征頂點的坐標和所述角度差,構建圓弧方程,從而確定連接所述兩個特征頂點的圓弧線段作為所述待填充圖形的一條邊;
28、基于圓弧插值法計算所述圓弧線段與該掃描線的交點。
29、進一步的,基于opengl?sc接口,將目標顏色填充至每一個掃描線段中的步驟包括:
30、對每條所述掃描線:
31、根據(jù)坐標對其對應的所有交點進行排序;
32、以二為步長,基于opengl?sc接口,使用所述目標顏色,連接所述交點。
33、本發(fā)明第二方面公開了一種基于opengl?sc的圖形填充系統(tǒng),包括:
34、接收模塊,用于接收圖形填充請求,所述圖形填充請求包括目標顏色及待填充圖形的所有特征頂點的坐標;
35、第一計算模塊,用于根據(jù)所有所述特征頂點的坐標,計算目標斜率;
36、生成模塊,用于根據(jù)所述目標斜率,生成多條預設寬度的虛擬的掃描線,以覆蓋所述待填充圖形;
37、第二計算模塊,用于計算各個所述掃描線與所述待填充圖形的交點,確定與所述待填充圖形相關的各個掃描線段;
38、填充模塊,用于基于opengl?sc接口,將目標顏色填充至每一個掃描線段中,以完成所述待填充圖形的填充。
39、本發(fā)明第三方面公開了一種電子設備,該設備包括存儲器、處理器以及存儲在所述存儲器中并可在所述處理器上運行的計算機程序,其特征在于,所述處理器執(zhí)行所述計算機程序時實現(xiàn)如本發(fā)明第一方面公開的任一項基于opengl?sc的圖形填充方法的步驟。
40、本發(fā)明提供了一種基于opengl?sc的圖形填充方法,通過生成虛擬掃描線并計算其與待填充圖形的交點,避免了遞歸調用和像素級遍歷,具有顯著的有益效果。本發(fā)明采用掃描線填充算法,無需遞歸調用,從根本上避免了棧溢出的風險,適用于安全關鍵領域(如航空電子、汽車電子)的圖形渲染需求。
1.一種基于opengl?sc的圖形填充方法,其特征在于,所述圖形填充方法包括:
2.根據(jù)權利要求1所述的一種基于opengl?sc的圖形填充方法,其特征在于,根據(jù)所有所述特征頂點的坐標,計算目標斜率的步驟包括:
3.根據(jù)權利要求1所述的一種基于opengl?sc的圖形填充方法,其特征在于,根據(jù)所述目標斜率,生成多條預設寬度的虛擬的掃描線的步驟包括:
4.根據(jù)權利要求1所述的一種基于opengl?sc的圖形填充方法,其特征在于,所述圖形填充請求還包括每個特征頂點與其相鄰特征頂點的角度差;其中,所述角度差表示所述特征頂點與其相鄰的特征頂點之間的連線的弧度;
5.根據(jù)權利要求4所述的一種基于opengl?sc的圖形填充方法,其特征在于,根據(jù)所述角度差,確定所述待填充圖形的每條邊的線段類型的步驟包括:
6.根據(jù)權利要求4所述的一種基于opengl?sc的圖形填充方法,其特征在于,當線段類型為直線線段時,根據(jù)每條邊的線段類型,計算該邊與該掃描線的交點的步驟包括:
7.根據(jù)權利要求4所述的一種基于opengl?sc的圖形填充方法,其特征在于,當線段類型為弧線線段時,根據(jù)每條邊的線段類型,計算該邊與該掃描線的交點的步驟包括:
8.根據(jù)權利要求1所述的一種基于opengl?sc的圖形填充方法,其特征在于,基于opengl?sc接口,將目標顏色填充至每一個掃描線段中的步驟包括:
9.一種基于opengl?sc的圖形填充系統(tǒng),其特征在于,所述圖形填充系統(tǒng)包括:
10.一種電子設備,包括存儲器、處理器以及存儲在所述存儲器中并可在所述處理器上運行的計算機程序,其特征在于,所述處理器執(zhí)行所述計算機程序時實現(xiàn)如權利要求1至8任一項所述基于opengl?sc的圖形填充方法的步驟。