999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Qt繪圖系統的圖形應用優化研究與實現

2016-02-13 05:58:14鄧子強王玉玫鄧紅艷
軟件 2016年12期
關鍵詞:系統

鄧子強,王玉玫,鄧紅艷,張 宇

(華北計算技術研究所 地理信息與圖形圖像研發中心,北京 100083)

基于Qt繪圖系統的圖形應用優化研究與實現

鄧子強,王玉玫,鄧紅艷,張 宇

(華北計算技術研究所 地理信息與圖形圖像研發中心,北京 100083)

為了提高Qt繪圖系統在存在大量圖元時對圖元操作的流暢性,減少卡頓現象,本文深入剖析了Qt繪圖引擎的實現機制和效率,提出了多圖層貼圖和增加編輯圖層的方案,將要繪制的圖元分類后分別繪制到多個pixmap中,每一個pixmap表示一個圖層,顯示時把pixmap貼到屏幕上即可,刷新時只對有圖元變化的圖層進行重繪。為了驗證該方案的有效性,本文實現了該方案并進行了測試,對測試結果進行了統計分析。

Qt;pixmap;圖層;重繪

0 引言

繪圖系統作為軍用圖形處理系統的基礎,其圖形繪制性能直接決定了軍用圖形處理系統的使用性。然而,如今戰場環境錯綜復雜,對標繪系統的圖元要求更加多樣化,對需要大批量圖元繪制的需求也隨著增加,同時更加注重標繪系統的動態刷新效率和實時性要求。這對繪圖系統來說是一個挑戰,本文正是對繪圖系統進行優化的一次嘗試,為了滿足繪圖系統的跨平臺需求,繪圖系統采用了Qt圖形繪制引擎[1],下文對圖形系統的優化都是基于Qt圖形繪制引擎的基礎之上。

1 Qt繪圖引擎

Qt采用基于虛擬緩存(FrameBuffer)[2]的物理繪圖設備,為了加快繪制圖形的速度,Qt中的每個客戶端程序都可以直接訪問虛擬緩存物理繪圖設備,虛擬緩存物理設備是一塊內存塊,程序在虛擬緩存上繪制圖像就相對于在屏幕上直接繪制。

Qt繪圖系統主要由三部分組成,QPainter,QPaintDevice,QPaintEngine。QPainter是一個繪制接口類,提供繪制各種面向用戶的命令,QPaintDevice是一個QPainter繪制的目的地,相當于畫布,QPaintEngine是基本繪制命令的具體實現。QPainter提供了大部分基本二維幾何圖元的繪制命令,如drawLine()、drawRect()、drawEllipse()等,Qt也提供了一系列繪圖命令來繪制pixmap和image等,例如drawPixmap()、drawImage()。

2 優化方案的設計與實現

在使用Qt進行圖形繪制時,一般會在paintEvent()函數中使用drawLine()、drawEllipse()、drawPath()等繪圖函數直接把圖元繪制到屏幕上,在圖元數量比較小的時候還可以接受,幾乎感覺不到性能差異,一旦圖元數量較多而且需要對圖元進行移動、刪除、修改屬性等操作時,性能將會大幅度降低。因為每次刷新時不管有沒有圖元被修改都會導致所有圖元重繪。

如果采用貼圖的方式,先把所有圖元繪制到pixmap上,再使用drawPixmap()函數進行貼圖,在刷新時如果沒有圖元[3]被修改便可將原來的pixmap直接貼圖,而不用把所有圖元都再次重繪。而且可以采用多個圖層,每個pixmap為一個圖層,把需要繪制的圖元分配到多個圖層上,每個圖層采用透明的方式,這樣多個圖層疊加的顯示效果便和單個圖層的效果一樣。這樣做的好處是可以使單個圖層上的圖元變化不會影響到其他圖層,因為圖層與圖層之間是獨立的,單個圖層上圖元的變動只會導致該圖層上圖元的重繪,對于其他沒有圖元變動的圖層只需進行簡單的貼圖便可,從而提高刷新速度。優化方案結構圖如下圖2.1所示:

圖2.1 優化方案結構圖

圖元劃分:把需要顯示的圖元劃分到n個圖層(本文中一個圖層即一個pixmap),圖層的數量n視圖元數量而定。劃分方法可以有多種,如按圖元類型進行劃分、按圖元的動靜態屬性進行劃分。

圖層疊加:圖元顯示時,把n個圖層設置為透明,這樣便可使所有pixmap上的圖元都得到顯示,不會被上面圖層所遮擋。

圖元操作:當對圖元進行選中、移動等操作時,會先把圖元移動到編輯圖層并進行高亮顯示,編輯圖層[4]操作完成后再回寫到所屬圖層。

2.1 圖元類

為了方便測試,測試方案中使用的圖元都是無填充的空心圓,圖元類的屬性包括圓心坐標(x,y)、圖元路徑(path)、圖元標識(id)、線色(lineColor)、線寬(lineWidth)和是否為臟數據(isShapeDirty)。

其中

圖元路徑:是使用QPainterPath::addEllipse()添加的圓,添加時需傳入圓的外接矩形的寬和高。

圖元標識:是使用QUuid::createUuid()生成的唯一識別碼。

是否為臟數據:當圖元屬性發生變化后會把isShapeDirty設為true。

2.2 圖層類

圖層類屬性包括繪圖設備(mpPixmap)、圖層標識(id)、圖元容器(hashShape)[5]以及是否為臟圖層(isLayerDirty)等。其中

繪圖設備:mpPixmap的寬和高都是在創建圖層時傳入,且被設置為透明。

圖層標識:是使用QUuid::createUuid()生成的唯一識別碼。

圖元容器:采用QHash保存圖元,可以提高檢索速度。

是否為臟圖層:當圖層上有圖元被修改比如移動、刪除等操作時,isLayerDirty會被設為true。

2.3 圖元管理

為了測試優化方案中圖元的動態刷新[6]時間,方案中實現了圖元的選中、移動、和刪除等操作。可以設置圖元的顏色、線寬、是否反走樣等屬性。

(1)圖元的刷新:圖元類BaseShape設有isShapeDirty標識,當圖元信息如坐標等發生改變時會被置為true,在刷新時圖層會對每個圖元進行遍歷,判斷該圖層是否有圖元發生變化。圖層類GLayer設有isLayerDirty標識,當對圖層進行addShape()和delShape()等對圖層信息進行變更的操作時會把isLayerDirty置為true。刷新時,會對圖層的標志位進行判斷,如果圖層沒有發生變化則使用drawPixmap()函數對原有的pixmap進行貼圖,如果發生變化,則把pixmap擦除后重新繪制該圖層的所有圖元到該pixmap,然后進行貼圖。每次刷新后isLayerDirty將會被置為false。

(2)圖元的拾取:設置setMouseTracking(true)之后mouseMoveEvent(QMouseEvent * event)函數會實時的跟蹤鼠標狀態,每當鼠標移動時該函數會檢測當前鼠標位置是否存在圖元,方法是遍歷所有圖層的hitTest()方法,圖層的hitTest()方法再遍歷圖層中每個圖元的hitTest()方法判斷鼠標位置是否落在圖元內。如果檢測到鼠標有落在圖元上則在編輯圖層hoverLayer的相同位置繪制高亮顯示的圖元。之所以會利用編輯圖層作高亮顯示[7]是為了避免整個圖層的刷新重繪從而提高重繪效率。

(3)圖元的拖動:當拾取到某個圖元后按下鼠標左鍵移動鼠標便可對圖元進行拖動,當拾取到圖元并按下鼠標左鍵開始移動時會把該圖元從所對應的圖層中刪除,并在編輯圖層中繪制高亮的圖元,編輯圖層中的高亮圖元會隨鼠標的移動而移動,當鼠標左鍵釋放時該圖元會重新被加入到它所屬的原始圖層,從而達到了圖元移動的操作。

(4)圖元的刪除:當拾取到某個圖元后,按下delete鍵可以對圖元進行刪除操作,刪除時會把該圖元從所屬的圖層移除,并且會把編輯圖層的高亮顯示擦除掉。

優化方案的運行結果如下圖2.2所示:

圖2.2 運行結果圖

3 性能測試與分析

測試環境:中標麒麟3.2.1,內存:4G,處理器:i7 2.93 GHZ,顯卡:NVIDIA GeForce9800 GT。

繪制內容:圓形(直徑50像素,線寬2像素,反走樣[7]),繪制窗口[8]大小:1024*768。

表2-1是當圖元數目為20000個的時候測試所得數據,時間單位統一為毫秒(ms)。

表2-2是當圖元數目為100000個的時候測試所得數據,時間單位統一為毫秒(ms)。

表2-3是當圖元數目為200000個的時候測試所得數據,時間單位統一為毫秒(ms)。

表2-1

表2-2

表2-3

從表2-1、2-2、2-3中可以得出一些結論:

隨著圖層的增多啟動時間[9]呈現增大的趨勢,因為圖層的初始化和管理需要花費部分時間,當圖層數目超過50個且圖元數目超過100000時啟動時間大大增加。

當圖層增加時,圖元的拾取時間有稍許增加,但因為拾取時間都只有幾十毫秒,對用戶來說基本不會有影響。

對于圖元的移動刷新時間和刪除時間,從表中可以看出大致呈增長的趨勢,尤其是在圖層為1增加到圖層為10的時候,刷新效率成倍數提高。

該論文提高繪圖性能的兩個關鍵點:

(1)采用了多個圖層和貼圖的方式,單個圖層的變化對其他圖層沒有影響,對于沒有變化的圖層只需進行簡單貼圖便可,不用再對無變化圖層的所有圖元進行重繪,大大提高了重繪效率,減少了刷新時間。

(2)采用了編輯圖層,在圖元的拾取和圖元的移動時,編輯圖層起了重要作用。圖元拾取時需要對拾取到的圖元進行高亮顯示,如果是在原有圖層上進行高亮顯示則需要對原有圖層上所有的圖元進行重繪,勢必會降低效率。在圖元移動時,如果是在原有圖層上進行圖元的坐標移動,則原有圖層上所有圖元都將進行重繪,伴隨著鼠標移動帶來的高頻率刷新會使得刷新效率驟然下降,當圖層上圖元較多時會導致圖元跟不上鼠標移動而出現卡頓甚至死機現象。

4 結語

本文介紹了Qt的繪圖系統,然后提出了基于多圖層的貼圖方式和采用編輯圖層的方案,為了證明該方案的確實可行且有效,本文實現了該方案并進行了測試,測試結果表明該方案對大批量圖元的動態刷新有明顯的效果。在標繪系統中,會存在顯示大批量圖元的的情況,甚至既有動目標[10]也有靜目標[11],我們可以把動目標單獨放在一層,這樣即使動目標刷新也不會影響到靜目標。

[1] AlanEzust, PaulEzust, An Introduetion to Design Patterns in C++ with Qt4, 2007.

[2] C++ GUI Programming with Qt3, Jasmin Blanchette, Mark Summerfield, Prentice Hall PTR, an.,2004.

[3] Jasmin Blanchette, Mark Summerfield C++ GUI Programming with Qt 4 [M]. Prentice Hall Jun 26, 2006.

[4] 羅喆. 基于COM技術的智能標繪系統的設計與實現重慶大學. 2012.04.

[5] 徐睿, 韋璐. 基于QT的數字邏輯虛擬實驗平臺設計[J].軟件, 2016, 37(01): 101-104.

[6] 張燕燕, 胡毓鉅. 地圖可視化[J]. 測繪工程, 2001, 10(1): 27-29.

[7] 張春艷, 基于Qt的嵌入式圖形用戶界面研究與實現, 2008,大連, 大連海事大學.

[8] 何建倉, 侯澤民. 嵌入式Qt環境下繪圖軟件的設計與實現[J]. 軟件, 2014, 35(5): 45-47.

[9] 別軍象. 嵌入式GIS矢量圖形標繪的研究西安工業大學. 2014.

[10] 李慧玲, 張俊霞. 計算機圖形圖像處理與制作專業教學改革分析[J]. 軟件. 2014(02)

[11] 張曉清, 龔波, 田麗韞, 等. 國產自主可控應用性能優化研究[J]. 軟件, 2015, 36(2): 5-9.

Research and Realization of Graphics Application Optimization Based on Qt Painting System

DENG Zi-qiang, WANG Yu-mei, DENG Hong-yan, ZHANG Yu (Geographic information and graphics technology research Center, North China Institute of Computing Technology, Beijing 100083, China)

In order to improve the smoothness of Qt painting system and reduce the phenomenon of Caton in the presence of a large number of elements, this paper deeply analyzes the mechanism and efficiency of Qt painting engine, and propose a solution that adopt multi-layer mapping and adding a editing-layer. Elements will be drawn to multiple pixmap after classification, each pixmap is a layer, therefore, we can paste the pixmap to screen when displayed, and we can only repaint the layer which elements were changed when refresh screen. In order to verify the effectiveness of this solution, this paper implements and tests the solution, and the test results were statistically analyzed.

Qt; Pixmap; Layer; Repaint

TP311

ADOI:10.3969/j.issn.1003-6970.2016.12.014

鄧子強(1991-),男,碩士研究生,研究方向:計算機圖形應用;王玉玫,女,研究員級高級工程師,研究方向:計算機圖形圖像處理及應用技術;鄧紅艷,教授,空軍指揮學院,研究方向:模擬仿真專業;張宇,工程師,中國電子設備系統工程公司研究所,研究方向:指揮自動化專業。

本文著錄格式:鄧子強,王玉玫. 基于Qt繪圖系統的圖形應用優化研究與實現[J]. 軟件,2016,37(12):59-62

猜你喜歡
系統
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
基于PowerPC+FPGA顯示系統
基于UG的發射箱自動化虛擬裝配系統開發
半沸制皂系統(下)
FAO系統特有功能分析及互聯互通探討
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
一德系統 德行天下
PLC在多段調速系統中的應用
主站蜘蛛池模板: 草逼视频国产| 久久精品国产亚洲AV忘忧草18| 五月丁香伊人啪啪手机免费观看| 无码专区国产精品第一页| 91av成人日本不卡三区| 日韩国产综合精选| 992tv国产人成在线观看| 一本一本大道香蕉久在线播放| 国产青青操| 欧美精品不卡| 国内精品久久久久久久久久影视| 在线观看国产精美视频| 91在线播放免费不卡无毒| 国产成人久视频免费| 国产午夜看片| 伊人网址在线| 国产欧美视频一区二区三区| 久久精品无码专区免费| 国产区在线看| 久久亚洲高清国产| 亚洲精品国产日韩无码AV永久免费网| 无码'专区第一页| 欧美精品影院| 色哟哟精品无码网站在线播放视频| 国产毛片片精品天天看视频| 男人天堂伊人网| 亚洲国产一区在线观看| 日本日韩欧美| 欧美亚洲日韩不卡在线在线观看| 色综合五月婷婷| 国产成人福利在线视老湿机| 性色在线视频精品| 亚洲娇小与黑人巨大交| 亚洲精品高清视频| 国产精品尤物在线| 久久免费精品琪琪| 欧美综合一区二区三区| 97在线国产视频| 香蕉综合在线视频91| 亚洲三级成人| 欧美成人亚洲综合精品欧美激情| 片在线无码观看| 亚洲国产精品日韩欧美一区| 国产精品v欧美| 中文无码精品A∨在线观看不卡 | 亚洲无码高清一区二区| 久久精品免费看一| 日本一区二区三区精品国产| 欧美高清三区| 亚洲综合精品香蕉久久网| 九九久久精品免费观看| 精品一区国产精品| 国产美女免费| 久爱午夜精品免费视频| 丰满人妻一区二区三区视频| 国产色婷婷视频在线观看| 色婷婷啪啪| 欧美日韩国产高清一区二区三区| 国产区精品高清在线观看| 国产午夜一级淫片| 性色在线视频精品| www.youjizz.com久久| 最新亚洲av女人的天堂| 亚洲国产成人久久77| 亚洲国产精品VA在线看黑人| 又爽又黄又无遮挡网站| 美女潮喷出白浆在线观看视频| 99热精品久久| 日韩高清成人| 四虎影视8848永久精品| 91在线无码精品秘九色APP| 欧美97欧美综合色伦图| 国产av一码二码三码无码 | 国产视频一区二区在线观看 | 日韩精品成人在线| 91在线精品免费免费播放| 福利一区在线| AV熟女乱| 久久动漫精品| 婷五月综合| 精品久久香蕉国产线看观看gif| 在线视频一区二区三区不卡|