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

基于Qt繪圖系統(tǒng)的圖形應(yīng)用優(yōu)化研究與實現(xiàn)

2016-02-13 05:58:14鄧子強(qiáng)王玉玫鄧紅艷
軟件 2016年12期
關(guān)鍵詞:系統(tǒng)

鄧子強(qiáng),王玉玫,鄧紅艷,張 宇

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

基于Qt繪圖系統(tǒng)的圖形應(yīng)用優(yōu)化研究與實現(xiàn)

鄧子強(qiáng),王玉玫,鄧紅艷,張 宇

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

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

Qt;pixmap;圖層;重繪

0 引言

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

1 Qt繪圖引擎

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

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

2 優(yōu)化方案的設(shè)計與實現(xiàn)

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

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

圖2.1 優(yōu)化方案結(jié)構(gòu)圖

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

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

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

2.1 圖元類

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

其中

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

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

是否為臟數(shù)據(jù):當(dāng)圖元屬性發(fā)生變化后會把isShapeDirty設(shè)為true。

2.2 圖層類

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

繪圖設(shè)備:mpPixmap的寬和高都是在創(chuàng)建圖層時傳入,且被設(shè)置為透明。

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

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

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

2.3 圖元管理

為了測試優(yōu)化方案中圖元的動態(tài)刷新[6]時間,方案中實現(xiàn)了圖元的選中、移動、和刪除等操作??梢栽O(shè)置圖元的顏色、線寬、是否反走樣等屬性。

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

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

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

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

優(yōu)化方案的運行結(jié)果如下圖2.2所示:

圖2.2 運行結(jié)果圖

3 性能測試與分析

測試環(huán)境:中標(biāo)麒麟3.2.1,內(nèi)存:4G,處理器:i7 2.93 GHZ,顯卡:NVIDIA GeForce9800 GT。

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

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

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

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

表2-1

表2-2

表2-3

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

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

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

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

該論文提高繪圖性能的兩個關(guān)鍵點:

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

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

4 結(jié)語

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

[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技術(shù)的智能標(biāo)繪系統(tǒng)的設(shè)計與實現(xiàn)重慶大學(xué). 2012.04.

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

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

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

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

[9] 別軍象. 嵌入式GIS矢量圖形標(biāo)繪的研究西安工業(yè)大學(xué). 2014.

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

[11] 張曉清, 龔波, 田麗韞, 等. 國產(chǎn)自主可控應(yīng)用性能優(yōu)化研究[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

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

本文著錄格式:鄧子強(qiáng),王玉玫. 基于Qt繪圖系統(tǒng)的圖形應(yīng)用優(yōu)化研究與實現(xiàn)[J]. 軟件,2016,37(12):59-62

猜你喜歡
系統(tǒng)
Smartflower POP 一體式光伏系統(tǒng)
WJ-700無人機(jī)系統(tǒng)
ZC系列無人機(jī)遙感系統(tǒng)
北京測繪(2020年12期)2020-12-29 01:33:58
基于PowerPC+FPGA顯示系統(tǒng)
基于UG的發(fā)射箱自動化虛擬裝配系統(tǒng)開發(fā)
半沸制皂系統(tǒng)(下)
FAO系統(tǒng)特有功能分析及互聯(lián)互通探討
連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
一德系統(tǒng) 德行天下
PLC在多段調(diào)速系統(tǒng)中的應(yīng)用
主站蜘蛛池模板: 精品视频一区在线观看| 国产第一页屁屁影院| 97人人模人人爽人人喊小说| 国产精品lululu在线观看| 精品亚洲欧美中文字幕在线看| av在线人妻熟妇| 国产精品自在自线免费观看| 成人蜜桃网| 色播五月婷婷| 国产真实乱子伦精品视手机观看| 亚洲视频在线青青| 男人天堂亚洲天堂| 亚洲av无码久久无遮挡| 国产午夜一级毛片| 国产成人麻豆精品| 国产 在线视频无码| 黄色网站在线观看无码| 国产第一页免费浮力影院| 91蝌蚪视频在线观看| 国产极品美女在线播放| 国产熟女一级毛片| 就去色综合| 无遮挡国产高潮视频免费观看| 日本国产精品| 无码高潮喷水在线观看| 视频在线观看一区二区| 国产综合日韩另类一区二区| 一本大道香蕉中文日本不卡高清二区 | 免费福利视频网站| 91成人试看福利体验区| 四虎影视无码永久免费观看| 亚洲欧美成人在线视频| 国产又黄又硬又粗| 日韩天堂视频| 日本午夜三级| 欧美亚洲欧美| 日本一区二区三区精品AⅤ| 欧美在线精品怡红院| 色亚洲成人| 99九九成人免费视频精品 | 亚洲高清中文字幕| 亚洲一区二区三区香蕉| 国产免费久久精品44| 欧美中文字幕第一页线路一| 日韩欧美中文字幕在线韩免费 | 亚洲综合九九| 国产精品xxx| 国产免费好大好硬视频| 中国成人在线视频| 国产性猛交XXXX免费看| 欧美日本在线一区二区三区| 99视频精品在线观看| 国产清纯在线一区二区WWW| 成人精品午夜福利在线播放| 国产91麻豆免费观看| 免费一级毛片在线播放傲雪网| 欧美成人二区| 婷婷伊人五月| 欧美午夜网| 日韩无码视频播放| 免费人成视网站在线不卡| jizz亚洲高清在线观看| 亚洲天堂免费在线视频| 最新国产精品鲁鲁免费视频| 国产精品毛片一区| 久草网视频在线| 亚洲欧美一区二区三区蜜芽| 天天激情综合| 色综合成人| 中文天堂在线视频| 在线观看无码av免费不卡网站| 亚洲91在线精品| 欧美无遮挡国产欧美另类| 久久久久国产精品免费免费不卡| av一区二区无码在线| 亚洲视频在线观看免费视频| 国产成人一区| 伊人色婷婷| 国产精品第一区在线观看| 日韩高清无码免费| 国产黄在线观看| 无码精品国产dvd在线观看9久|