黃東運 雷歡 盧杏堅
(廣東省自動化研究所)
一種用于圖形設(shè)備接口的筆畫模型方法
黃東運 雷歡 盧杏堅
(廣東省自動化研究所)
視頻監(jiān)控的在屏交互過程中,需要快速地對交互控件、感興趣區(qū)域、活動標(biāo)記等圖形和圖像進(jìn)行繪制,為避免畫面的停滯感,要求圖形設(shè)備接口能快速進(jìn)行繪制。為此,提出了一種筆畫模型方法。利用DirectX的原始繪制能力,該方法將繪制任務(wù)轉(zhuǎn)換成筆畫對象,使視頻系統(tǒng)在實時運行過程中,只需將已轉(zhuǎn)換的筆畫對象的繪制數(shù)據(jù)提交給DirectX進(jìn)行渲染和顯示即可,降低重復(fù)繪制時間,滿足系統(tǒng)的快速繪制要求。基于筆畫模型方法,開發(fā)了一種可快速繪制的圖形設(shè)備接口。
筆畫模型;原子繪制;二維;三維;DirectX;圖形設(shè)備接口
隨著計算機技術(shù)的發(fā)展,傳統(tǒng)的視頻監(jiān)控系統(tǒng)慢慢退出市場,新的網(wǎng)絡(luò)型、智能型、交互型、高清型的視頻監(jiān)控系統(tǒng)得到快速發(fā)展??山换バ偷囊曨l監(jiān)控系統(tǒng)在視頻窗口繪制多種交互控件、感興趣區(qū)域(Region of Interest,ROI)、活動標(biāo)記的同時,也要求及時響應(yīng)用戶的外部請求。高清晰度電視使用的數(shù)字圖像分辨率最高可達(dá)1920×1080像素,幀率高達(dá)60 f/s,非壓縮的彩色圖像幀幾乎占用6兆的存儲空間。視頻系統(tǒng)每秒需要繪制大量圖像,并在視頻窗口或全屏顯示的視頻區(qū)域內(nèi)進(jìn)行交互(簡稱在屏交互),對此傳統(tǒng)的圖形設(shè)備接口(Graphics Device Interface,GDI)無法滿足繪制要求。
為更好地提高繪制速度,除了使用性能更高的硬件配置外,在Windows操作系統(tǒng)中,視頻監(jiān)控系統(tǒng)直接調(diào)用DirectX提供的應(yīng)用編程接口進(jìn)行圖像和圖形繪制或使用WPF提供的應(yīng)用編程接口進(jìn)行繪制。DirectX是微軟為了解決大型游戲系統(tǒng)大量圖像和圖形繪制的需求提出和發(fā)展而來的。DirectX9應(yīng)用編程接口封裝完全針對3D圖像或圖形的繪制,對于大部分情況下使用2D圖像或圖形繪制的視頻監(jiān)控系統(tǒng)來說,直接使用比較困難,需要大量的編程。WPF是微軟最新發(fā)布的GDI,在DirectX的基礎(chǔ)上開發(fā),對DirectX提供的函數(shù)和機制進(jìn)行了進(jìn)一步封裝。WPF的使用需要龐大的.net框架支持,且對開發(fā)系統(tǒng)和環(huán)境要求比較高[1]。
本文提出一種筆畫模型方法,該方法利用DirectX提供的原始繪制和紋理渲染功能,實現(xiàn)視頻窗口快速繪制,可以滿足大分辨率數(shù)字圖像和大幀率播放的視頻窗口繪制任務(wù)的要求,為視頻監(jiān)控系統(tǒng)提供一種易用、開發(fā)環(huán)境和應(yīng)用環(huán)境要求較低、功能強大的圖形和圖像繪制模塊。與此同時開發(fā)出一種基于筆畫模型的圖形設(shè)備接口(Stroke Modeling Based Graphics Device Interface,SM-GDI),以該模塊為例描述筆畫模型的方法、原理和使用方式。
圖像設(shè)備接口的主要功能是對各種幾何圖形,如直線、圓、橢圓、矩形以及文字和數(shù)字圖像在窗口或屏幕上進(jìn)行繪制。視頻監(jiān)控的視頻窗口中圖像和圖形繪制一般包括兩個部分:① 背景圖像幀的繪制,即當(dāng)前采集到的數(shù)字圖像;② 前景圖形對象的繪制。典型的視頻窗口繪制過程如圖1所示。
圖1 典型的視頻窗口繪制
繪制過程中,一般先繪制背景圖像,然后繪制前景對象,如交互控件、活動標(biāo)記。繪制背景圖像時一般需要繪制整個視頻窗口。每次繪制完成后,需要將所有的前景對象重新繪制一遍,然后提交給顯示器進(jìn)行顯示。
整個繪制的過程(見虛線框內(nèi))由繪制背景圖像和前景對象所需要的時間及提交給顯示器顯示的時間構(gòu)成。背景圖像的數(shù)量一般不變,但圖像分辨率越大繪制時間越長;前景對象的數(shù)量隨不同的應(yīng)用場所會發(fā)生變化,數(shù)量越多所需要的繪制時間越長;在提交繪制結(jié)果時,提交給顯卡設(shè)備的速度越快,耗時就越短;視頻系統(tǒng)的圖像采集幀率越大,視頻窗口里面進(jìn)行繪制的時間要求越短。
為滿足大幀率的快速繪制要求,GDI需要降低背景圖像和前景對象繪制時間以及繪制結(jié)果顯示時間。在不需要拉伸的情況下,背景圖像的繪制基本上是一個像素拷貝過程,方法優(yōu)化的可能性不大,而在需要拉伸的情況下,有一定的優(yōu)化空間;前景對象繪制數(shù)量多,各種不同形狀的圖形繪制方法不一,優(yōu)化的空間很大;繪制結(jié)果提交是一個將繪制的內(nèi)存緩存提交給顯示卡的過程,方法優(yōu)化的可能性很小。
根據(jù)以上分析,提出一種筆畫模型方法。該方法在圖形或圖像繪制過程中,繪制運算結(jié)果不直接作用在目標(biāo)緩沖區(qū),而是轉(zhuǎn)換成DirectX可以識別和使用的頂點和紋理數(shù)據(jù),在需要顯示的時候,直接將這些數(shù)據(jù)提交給DirectX進(jìn)行渲染,減少前景對象繪制的時間,從而加快整個系統(tǒng)的圖像圖形的繪制速度。
2.1 DirectX
DirectX軟件開發(fā)套件是微軟為開發(fā)多媒體應(yīng)用提供的后臺通道。DirectX是一套底層應(yīng)用編程接口,用于創(chuàng)建游戲和其它高性能的多媒體應(yīng)用。支持高性能的2D和3D圖像繪制[2]。為保持一致,DirectX的應(yīng)用編程接口以3D圖像繪制要求為標(biāo)準(zhǔn)。除了提供硬件加速功能外,DirectX還提供下面幾項重要的幾何圖形繪制和渲染功能:
(1) 基于頂點繪制的多種類型的點、線、三角形繪制;
(2) In-Memory Surface直接繪制到Video Card Surface;
(3) 利用Video Card Surface的拉伸功能進(jìn)行數(shù)字圖像拉伸繪制加速;
(4) 靈活的紋理渲染功能。
DirectX提供的這些功能和接口,可以實現(xiàn)2D 圖形設(shè)備接口中要求完成的幾何圖形和BITMAP格式數(shù)字圖像的繪制任務(wù),滿足文中提出的利用筆畫模型方法實現(xiàn)GDI的底層接口要求。
2.2 筆畫模型
SM-GDI將視頻窗口看作一個畫板,每次繪制的結(jié)果,都被稱之為筆畫。在進(jìn)一步描述模型方法之前,需要闡述本文的3個定義。
定義1 筆畫:一個單獨的繪制執(zhí)行,可以是一個基本的幾何圖形,如點、直線、圓或一段文本、一幅圖片。在系統(tǒng)中被認(rèn)為是不可再分的最小繪制單位。
定義2 原子繪制:在每次繪制的過程中,繪制對象的屬性即顏色、透明度、筆畫粗細(xì)和繪制質(zhì)量都是一致的。
定義3 原子繪制函數(shù):將一個繪制任務(wù)轉(zhuǎn)換為唯一的筆畫對象。原子繪制函數(shù)需滿足以下兩個條件:① 必須與唯一的筆畫對象有關(guān);② 必須滿足原子繪制條件,即繪制對象的屬性是一致的。
筆畫模型方法的主要思想是在繪制過程中不直接將繪制結(jié)果作用在目標(biāo)內(nèi)存緩沖區(qū),而是在初次繪制的時候?qū)⑿枰L制的任務(wù)轉(zhuǎn)換成DirectX可以識別的頂點或紋理數(shù)據(jù),然后在每次需要重新繪制的時候,直接將這些數(shù)據(jù)提交給DirectX進(jìn)行渲染和顯示。
筆畫模型方法包括三個方面:① 原子繪制函數(shù)的實現(xiàn);② 應(yīng)用編程接口(Application Programming Interface,API)繪制函數(shù)的封裝;③ 應(yīng)用程序的對API繪制函數(shù)的調(diào)用方式。為了更好說明筆畫模型方法,本文以基于該方法開發(fā)的SM-GDI為實例,在第3、4、5節(jié)里面分別進(jìn)行描述。
GDI需要繪制的對象主要包括:幾何圖形、文本和數(shù)字圖像。在筆畫模型的繪制方法中,筆畫模型將繪制任務(wù)轉(zhuǎn)換成筆畫對象。在實現(xiàn)過程中,實際上是將輸入的幾何點坐標(biāo)、文本,對齊方式和數(shù)字圖像數(shù)據(jù)以及一些特殊要求的繪制參數(shù),轉(zhuǎn)換成不同類型的原始繪制的頂點數(shù)據(jù)和紋理數(shù)據(jù)。在原子繪制函數(shù)中,轉(zhuǎn)換后的數(shù)據(jù)被封裝成筆畫,其筆畫數(shù)據(jù)滿足原子繪制的要求。下面描述在原子繪制函數(shù)中,不同情況下的繪制任務(wù)轉(zhuǎn)換方法。
3.1 幾何圖形
幾何圖形包括點、直線、曲線(如圓?。⒎忾]圖形(如多邊形)等。根據(jù)DirectX提供的原始繪制功能和幾何圖形屬性,需要將不同幾何圖形繪制任務(wù)轉(zhuǎn)換為包含不同屬性的頂點數(shù)據(jù)的筆畫對象?;镜霓D(zhuǎn)換方式如下:
(1) 點:根據(jù)所選擇的筆型轉(zhuǎn)換成相應(yīng)的原子繪制頂點數(shù)據(jù)。如果筆型的寬度為1,轉(zhuǎn)換為D3DPT_ POINTLIST類型的頂點數(shù)據(jù);如果線寬大于1,轉(zhuǎn)換為D3DPT_TRIANGLE_FAN類型的頂點數(shù)據(jù);
(2) 直線:根據(jù)所選擇的筆型轉(zhuǎn)換成相應(yīng)的原子繪制頂點數(shù)據(jù)。如果線寬為1,轉(zhuǎn)換為D3DPT_LINE_LIST類型的頂點數(shù)據(jù);如果大于1,轉(zhuǎn)換為D3DPT_TRIANGLE_LIST類型的頂點數(shù)據(jù);
(3) 曲線:如果不需要填充,在曲線轉(zhuǎn)換過程中,首先需要計算組成曲線的幾何點,然后將這些點擬合成線段,最后按照直線方式進(jìn)行處理;如果需要填充,則轉(zhuǎn)換為D3DPT_TRIANGLE_FAN類型的數(shù)據(jù);
(4) 封閉多邊形:如果不需要填充,轉(zhuǎn)換成D3DPT_LINE_STRIP類型的頂點數(shù)據(jù);如果需要填充,且為凸面,轉(zhuǎn)換成D3DPT_TRANGLE_FAN類型的頂點數(shù)據(jù);如果需要填充,且為非凸面,則轉(zhuǎn)換成D3DPT_TRANGLE_LIST類型的頂點數(shù)據(jù)。
3.2 數(shù)字圖像
在繪制數(shù)字圖像時,需要進(jìn)行拉伸、縮放、旋轉(zhuǎn)、變形、排列、某一區(qū)域內(nèi)對齊等繪制。面對各種不同的繪制要求,轉(zhuǎn)換方法為:首先將圖像轉(zhuǎn)換成大小相同的紋理對象;然后根據(jù)不同的繪制要求,設(shè)置不同的紋理坐標(biāo)和畫板上的目標(biāo)坐標(biāo);最后按照D3DPT_TRANGLE_STRIP類型的頂點進(jìn)行繪制,達(dá)到特定的繪制效果。因此,圖像繪制函數(shù)的筆畫包含紋理數(shù)據(jù)和兩個D3DPT_TRANGLE_STRIP類型的頂點數(shù)據(jù)。紋理坐標(biāo)和目標(biāo)坐標(biāo)計算方法如下:
(1) 拉伸:將拉伸后的矩形的四個目標(biāo)坐標(biāo)設(shè)置成紋理的目標(biāo)坐標(biāo),對應(yīng)的紋理坐標(biāo)分別為(0,0), (0,1),(1,1), (1,0);
(2) 縮放:根據(jù)縮放因子,計算出縮放以后的目標(biāo)坐標(biāo)位置,然后按照拉伸方式處理;
(3) 旋轉(zhuǎn):根據(jù)數(shù)字圖像的大小和旋轉(zhuǎn)角度,以圖像中心為旋轉(zhuǎn)中心,然后計算旋轉(zhuǎn)后的圖像矩形坐標(biāo),將結(jié)果設(shè)置成紋理的目標(biāo)坐標(biāo),最后按照拉伸方式處理;
(4) 變形:直接將指定的四個頂點坐標(biāo)設(shè)置成紋理目標(biāo)坐標(biāo),然后按照拉伸方式處理;
(5) 排列繪制:將紋理的尋址模式設(shè)置成包裝模式,然后將目標(biāo)區(qū)域矩形的坐標(biāo)設(shè)置成紋理目標(biāo)坐標(biāo),最后通過重復(fù)繪制的數(shù)量計算出紋理頂點坐標(biāo);
(6) 某一區(qū)域內(nèi)對齊:根據(jù)矩形區(qū)域的大小和對齊方式,計算出目標(biāo)坐標(biāo)位置,紋理坐標(biāo)不變。
3.3 文本繪制
文本的繪制需要將繪制任務(wù)轉(zhuǎn)換成包含一個紋理對象、兩個用于控制紋理繪制的D3DPT_TRI、ANGLE_STRIP類型的頂點數(shù)據(jù)的筆畫對象。其繪制過程分兩個階段:
(1) 使用操作系統(tǒng)的應(yīng)用編程接口,將文本編碼轉(zhuǎn)換成BITMAP的數(shù)字圖像;
(2) 根據(jù)當(dāng)前字體對象的屬性和繪制參數(shù),將數(shù)字圖像轉(zhuǎn)換成紋理對象,然后按照D3DPT_TRANG、LE_STRIP類型的頂點進(jìn)行繪制。
在SM-GDI中,API繪制函數(shù)是連接上層應(yīng)用程序和原子繪制函數(shù)的中間接口。涉及API繪制函數(shù)的封裝方式和調(diào)用方式如下:
每個繪制函數(shù)返回一個筆畫對象,同時對繪制函數(shù)增加一個筆畫對象參數(shù)。當(dāng)應(yīng)用程序調(diào)用對應(yīng)的函數(shù)時,如果輸入的筆畫對象為空(NULL),繪制函數(shù)則自動創(chuàng)建一個新的筆畫對象,然后返回該對象。如果輸入一個已經(jīng)存在的筆畫對象,繪制函數(shù)將直接在該筆畫對象上進(jìn)行修改。
如筆畫模型的繪制直線函數(shù)為:
該函數(shù)繪制同一條直線,返回一個筆畫對象句柄。筆畫對象句柄的返回和重用可以保證繪制的順序,但不會對筆畫對象進(jìn)行反復(fù)重建。
當(dāng)應(yīng)用程序進(jìn)行繪制函數(shù)的調(diào)用時,方式如下:
其中m_hLine為保存筆畫對象的變量,需要一個比較大的訪問域(如模塊級或類級)以保證在調(diào)用結(jié)束后不會丟失筆畫對象句柄。
在實際的應(yīng)用中,需要對已有的筆畫對象進(jìn)行擦除或修改,為了降低繪制時間,SM-GDI提供專門的繪制函數(shù)直接對筆畫對象進(jìn)行修改或刪除。表1是以繪制直線為例,說明不同繪制操作下調(diào)用函數(shù)方式。
表1 不同操作下的函數(shù)調(diào)用
為了滿足快速繪制要求,SM-GDI在應(yīng)用過程中,將繪制過程劃分兩個階段完成,即離線狀態(tài)下的繪制和在線狀態(tài)下的實際渲染和顯示。離線狀態(tài)下的繪制一般為系統(tǒng)初始化階段的繪制,如圖2所示。在這個階段數(shù)字相機還沒有進(jìn)行圖像采集,系統(tǒng)進(jìn)行必要的初始化工作,對圖像和圖形繪制沒有嚴(yán)格的時間要求。在該階段,調(diào)用SM-GDI的繪制函數(shù)在視頻窗口中進(jìn)行創(chuàng)建交互控件、ROI、活動標(biāo)記等對象。
圖2 初始化階段的繪制
在視頻運行階段,視頻系統(tǒng)處于連續(xù)采集狀態(tài)下,需要不斷地對視頻窗口刷新。與傳統(tǒng)GDI繪制不同的是,該階段對前景對象繪制時不需要對組成幾何對象的像素重新計算,只需將已經(jīng)轉(zhuǎn)換好的模型數(shù)據(jù)直接提交給DirectX進(jìn)行渲染,降低繪制計算時間,如圖3所示。
圖3 視頻運行階段的繪制
基于DirectX和筆畫繪制的模型將從時間復(fù)雜度和空間復(fù)雜度兩方面進(jìn)行分析。由于DirectX提供一個與顯卡快速通信的后臺通道,并提供原始的繪制接口,整個性能的分析主要集中在筆畫模型方法的評估。由于筆畫模型方法中每次原始繪制僅僅生成一個筆畫對象,SM-GDI需要對這些筆畫對象進(jìn)行管理,因此,還需要對筆畫管理方法的復(fù)雜度進(jìn)行評估。筆畫模型的性能評估從時間復(fù)雜度和空間復(fù)雜度兩個方面進(jìn)行。
6.1 時間復(fù)雜度
(1) 圖形圖像繪制
SM-GDI主要繪制幾何圖形、數(shù)字圖像和文本。數(shù)字圖像和文本繪制的很多工作都是交給操作系統(tǒng)或顯卡完成的,時間復(fù)雜度相對簡單。幾何圖形由于形狀差異,其時間復(fù)雜度不一樣,需要分不同情況處理,表2列出了幾種對象繪制的時間復(fù)雜度。
表2 各種圖形圖像繪制的時間復(fù)雜度
幾何圖形的繪制過程中,實際上將定義給幾何圖形的幾個幾何點計算成組成該幾何圖形的離散點(像素),然后將該幾何點按照不同的部分?jǐn)M合成DirectX需要的線段點陣。對于點和直線來說,可以直接應(yīng)用到DirectX函數(shù),時間復(fù)雜度為O(1);對于多線段的幾何圖形如矩形,時間復(fù)雜度為O(n),其中n為線段數(shù)量。曲線圖形如圓需要先將曲線轉(zhuǎn)換成點序列,然后再擬合成線段。其時間復(fù)雜度由兩部分組成:①曲線的繪制采用王潤云等[3]提出的快速的Bresenham方法,時間復(fù)雜度為Od(ncl),其中ncl為曲線長度;② 線段擬合采用梯度合并方法,時間復(fù)雜度為Oa(npl),其中npl為點序列長度。因此其總時間復(fù)雜度為Od(ncl)+Oa(npl)。復(fù)雜的幾何圖形由以上基本圖形組成,其時間復(fù)雜度為每個基本圖像的時間復(fù)雜度的總和。
數(shù)字圖像的繪制需要將其轉(zhuǎn)換為DirectX中的紋理或表面。在不拉伸的情況下,數(shù)字圖像主要為逐點拷貝。對二維數(shù)字圖像來說,為O(m×n),m和n分別為圖像的長度和高度。對于拉伸的情況,不同的取樣方式時間復(fù)雜度不同。在本模型中,由于像素取樣方法由顯卡硬件實現(xiàn),故可忽略像素取樣時的時間復(fù)雜度。因此,不管哪種情況,均可認(rèn)為數(shù)字圖像的時間復(fù)雜度為O(m×n)。
文本分為矢量文本格式和點陣格式。無論哪種格式,都需要將它們轉(zhuǎn)成數(shù)字圖像,然后轉(zhuǎn)成紋理提交給DirectX進(jìn)行渲染。將文本格式轉(zhuǎn)成數(shù)字圖像由操作系統(tǒng)完成,這個轉(zhuǎn)換過程的時間復(fù)雜度不考慮,轉(zhuǎn)換的時間復(fù)雜度為Ot(l),其中l(wèi)為文本中的字符數(shù),總的時間復(fù)雜度為Oi(m×n)+Ot(l)。
(2) 筆畫對象管理
筆畫對象使用雙向鏈表進(jìn)行管理,在全新繪制階段,SM-GDI直接生成一個筆畫對象,然后填加到鏈表表尾,時間復(fù)雜度為O(1)。在實際繪制階段,將筆畫對象的頂點和紋理數(shù)據(jù)傳入DirectX,時間復(fù)雜度為O(n),n為筆畫對象的數(shù)量。筆畫對象刪除的時間復(fù)雜度與一般雙向鏈表刪除的時間復(fù)雜度相同,其值為O(1)。系統(tǒng)管理對象的時間復(fù)雜度如表3所示。
表3 系統(tǒng)管理對象的時間復(fù)雜度
除了重繪時的時間復(fù)雜度為線性外,其它情況時間復(fù)雜度均為O(1)。在進(jìn)行視頻窗口繪制時,需要遍歷雙向鏈表,繪制時間會隨著筆畫對象的增多而增多,即線性增長。其它情況下,系統(tǒng)計算時間不會隨著筆畫對象的增加而增加,降低系統(tǒng)性能。
由上述分析可以看出,新系統(tǒng)的計算時間主要集中在圖形圖像的繪制過程中,這些繪制可以在系統(tǒng)初始化階段完成,降低了整個系統(tǒng)的計算時間。
6.2 空間復(fù)雜度
筆畫模型方法不是直接將繪制結(jié)果輸出到目標(biāo)緩沖區(qū)上,而是建立一個筆畫對象,保存DirectX可以識別的線段的點陣,因此必須增加額外的內(nèi)存空間。在繪制過程中,數(shù)字圖像需要轉(zhuǎn)化為紋理對象,空間復(fù)雜度為O(m×n)。文本需要先轉(zhuǎn)成數(shù)字圖像,然后再轉(zhuǎn)成紋理對象,空間復(fù)雜度為Oi(m× n)+Oi(m× n)。所有幾何圖形最終轉(zhuǎn)換成線段的頂點點陣,空間復(fù)雜度為O(n),其中,n為轉(zhuǎn)換后的組成幾何圖像點的數(shù)量。使用鏈表管理筆畫對象,需要額外的用于空間管理對象的指針,空間復(fù)雜度為O(x),其中x為筆畫對象的數(shù)量。各對象繪制的空間復(fù)雜度如表4所示。
表4 各對象繪制的空間復(fù)雜度
與直接繪制到目標(biāo)緩沖區(qū)的GDI相比較,基于筆畫模型的SM-GDI需要額外的一倍或數(shù)倍于繪制對象本身的內(nèi)存空間。在現(xiàn)代計算機硬件快速發(fā)展的今天,這些內(nèi)存空間已經(jīng)不成問題。
在視頻系統(tǒng)里面,每次繪制都需要將背景圖像幀重畫,測試主要針對前景對象進(jìn)行。為了有一個相對完整的測試結(jié)果和性能比較,本文針對前景對象設(shè)計了6組測試用例,繪制任務(wù)從少到多依次增加,見表5。基本的繪制內(nèi)容包括橢圓、矩形、中英文文本和數(shù)字圖像。為了使測試結(jié)果更具直觀性,防止屏幕停滯感,將增加當(dāng)前操作系統(tǒng)時間的顯示(以毫秒為單位),該顯示不作為基本繪制內(nèi)容來設(shè)計測試用例。
表5 繪制測試用例
每組用例在兩個不同的GDI中進(jìn)行:Windows XP提供的GDI和利用本文方法開發(fā)的SM-GDI。圖4是不同GDI在測試過程中的一組測試用例的繪制結(jié)果。
圖4 兩個不同GDI繪制結(jié)果
測試在Windows XP Professional操作系統(tǒng)上進(jìn)行,硬件基本配置為Intel(R) Core? 2 duo CPU2.10G,2.0G內(nèi)存。DirectX版本為October,2004。背景圖像的分辨率為1024×768像素,24位真彩色。記錄的測試結(jié)果為每秒可以繪制的幀數(shù),均采用觀察到的最大數(shù)值。詳細(xì)的測試結(jié)果如表6所示。
表6 不同GDI的處理速度 幀/秒
從表6的測試結(jié)果可以看出,如果按照PAL標(biāo)準(zhǔn)25幀/秒的要求,除了第6次測試結(jié)果略小于要求的幀率以外,SM-GDI在其它測試過程中,幀率均可以達(dá)到要求。圖5為不同GDI在繪制量逐步增大時的處理速度和變化趨勢。按照每幀重畫的方法進(jìn)行繪制時,Windows GDI在小繪制量時性能要遠(yuǎn)遠(yuǎn)好于按照重繪方法進(jìn)行繪制的SM-GDI,但是當(dāng)繪制量達(dá)到一定程度時,二者性能差異不大。
圖5 不同GDI繪制的幀率變化趨勢
通過實驗結(jié)果可以看出,筆畫模型方法增加了空間復(fù)雜度,需要額外的存儲空間,但它在繪制量增加時,幀率下降速度不會很明顯,即使每次需要繪制的數(shù)量達(dá)到4000筆畫左右時,響應(yīng)幀率仍然可以接近
25幀,滿足視頻窗口在大幀率下各種繪制任務(wù)的要求。不過,由于筆畫模型方法不直接作用在目標(biāo)緩沖區(qū),在使用傳統(tǒng)過程進(jìn)行視頻窗口繪制時,性能反而惡化。在視頻監(jiān)控的在屏交互過程中,當(dāng)進(jìn)行視頻窗口的交互控件繪制時,同一筆畫變化的情況并不多,故本文提出的筆畫模型方法是適用和可行的。
[1] WPF優(yōu)點之比較GDI,GDI+ Jogholy專欄 http://blog.csdn. net/ joji_h/article/details/3881355.
[2] The DirectX Software Development Kit. DirectX c++ documentary. DirectX SDK Update October 2004.
[3] 王潤云,王志喜.一種快速準(zhǔn)確的畫圓方法[J].四川工業(yè)學(xué)院學(xué)報, 2004,23(02):43-44,53.
A Method Named Stroke Modeling for Building Graphics Device Interface
Huang Dongyun Lei Huan Lu Xingjian
(Guangdong Institute of Automation)
When the live video surveillance system interacts with users, it needs fast implementation for drawing or painting user controls, interested region picks, activity marks as well as digital images to avoid a frozen display, that requires the graphics device interface modules to draw or paint quickly. We propose a new method named stroke modeling, which takes the advantages of drawing primitives provided by DirectX to transform drawing tasks into stroke objects, enabling the video systems in its run time to fulfill a fast implementation for render or display by submitting the pre-generated stoke objects to the DirectX, cutting off the drawing time dramatically. Following the method, we have developed a graphics device interface module which may be used for quick graphical rendering or drawing.
Stroke Modeling; Atomic Drawing; 2D; 3D; DirectX; GDI
黃東運,男,1975年生,碩士,研究方向:機器視覺、圖像識別。E-mail: buffi@qq.com。