張華琳,高 升,馬 茜,王士成
(1.河北遠東哈里斯通信有限公司,河北石家莊050081;2.中國電子科技集團公司第五十四研究所,河北石家莊050081)
隨著航天及衛(wèi)星遙感器件技術的迅速發(fā)展,遙感衛(wèi)星在數(shù)字測繪、資源調查、災害監(jiān)測、城市規(guī)劃、土地利用、環(huán)境保護和旅游導航等方面發(fā)揮著越來越重要的作用,其所形成的影像圖片分辨率以每10年一個數(shù)量級的比率提高。
采用普通的圖像顯示技術已經(jīng)很難滿足衛(wèi)星寬幅圖像高速平滑顯示的需求,而微軟提供的DirectDraw技術可以很好地解決這方面問題。DirectDraw技術支持對顯示存儲器中位圖進行直接訪問,快速實現(xiàn)硬件的位塊轉移和緩存翻轉,從而加速硬件和軟件圖形的實時顯示和處理。DirectDraw在提供這些功能的同時,仍與現(xiàn)在基于Windows環(huán)境的應用程序和設備驅動程序保持兼容,并提供了一種設備無關的方法以獲得訪問特定的顯示設備高級的特性。
利用DirectDraw技術實現(xiàn)衛(wèi)星圖像數(shù)據(jù)的快速顯示,需要創(chuàng)建2個進程,一個進程用于圖像數(shù)據(jù)的接收,并將數(shù)據(jù)存儲在本地硬盤以便進行回放顯示;另一個進程用于圖像的實時快速顯示。DirectDraw技術的層次結構如圖1所示,軟件的輸入處理輸出(IPO)如圖2所示。
圖1 DirectDraw的層次結構
圖2 軟件輸入處理輸出圖
在程序框架下創(chuàng)建DirectDraw對象,DirectDraw對象代表顯示適配器,是整個軟件的核心,DirectDraw對象創(chuàng)建成功之后才可創(chuàng)建圖面、調色板等其他相關對象。創(chuàng)建函數(shù)需要輸入視頻卡驅動的指針,如果調用成功則返回有效的對象接口,如果失敗則將提示硬件不支持、內(nèi)存溢出或參數(shù)無效等錯誤信息。
設置軟件與操作系統(tǒng)的協(xié)作級別以實現(xiàn)軟件是以全屏方式還是以窗口模式來運行。在全屏模式下軟件可以直接操作視頻設備,整個屏幕表面完全分配給應用程序。而在窗口模式下,程序不能獨占整個屏幕,顯示數(shù)據(jù)時需要與操作系統(tǒng)進行協(xié)作,并且不能改變顯示器分辨率和主圖面的調色板,也不支持翻面操作。由此可見,快視顯示程序在全屏模式下要比窗口模式運行快速得多。設置協(xié)作級別的函數(shù)需要輸入窗口句柄和控制參數(shù),返回調用成功信息或調用失敗時的錯誤代碼。
軟件的顯示模式用于硬件設置,以描述快視數(shù)據(jù)顯示時顯示器寬、高的像素數(shù)以及像素的位深度。
顯示模式分為調色板式和非調色板式。對于調色板式顯示模式來說,每一個像素的顏色值以一個相關調色板的索引值來代表,而顯示模式的位深度決定了調色板中可容納的顏色數(shù)量。在非調色板模式下顯示的即是像素的真實顏色。只有在顯示模式位深度為8的情況下才有必要使用調色板模式,以此達到顯示彩色顏色的目的。DirectDraw支持1位、2位、4位和8位的調色板。使用調色板模式可以極大充分地節(jié)省顯存或內(nèi)存空間,但同時也有顯示非真實顏色的缺陷。
使用函數(shù)列舉視頻卡所支持的全部顯示模式,根據(jù)所接收圖像的實際情況和需求設置視頻模式,如果僅是黑白圖像,則只需將色深設置為8位即可,以充分利用顯存空間,達到最平滑、最快速的目的。設置顯示模式需要輸入圖像顯示的寬、高、位深度及屏幕的刷新率。在后續(xù)創(chuàng)建的主圖面及離屏圖面必須符合顯示模式的尺寸和位深度。
在快視圖像數(shù)據(jù)顯示完畢時,需要調用恢復顯示模式的方法將顯示器還原到原來的顯示模式,以備其他程序使用。
主圖面直接對應于被視頻卡光柵化的實際顯存(VRAM),它直接指向屏幕圖像,并且主圖面的存在形式必須與視頻的顯示模式相對應,即有相同的像素寬度、高度和位深度。
創(chuàng)建主圖面的函數(shù)返回圖面指針,即與屏幕顯示直接對應的顯存或是內(nèi)存區(qū)域。根據(jù)主圖面的指針,用函數(shù)鎖住圖面區(qū)域,直接訪問幀緩存或離屏圖面存儲區(qū)。在完成數(shù)據(jù)操作后,需要調用函數(shù)來解除鎖定的圖面。
圖面中像素的行間距并非為固定的數(shù)值,在鎖定圖面區(qū)域前,需要調用函數(shù)獲取像素的行間距,否則一旦行間距因其他潛在因素被改變,圖像數(shù)據(jù)將顯示混亂。
當圖面對象內(nèi)存被破壞甚至被釋放時,可以調用恢復圖面的函數(shù)為圖面再次分配內(nèi)存,并需要重新寫入像素數(shù)據(jù)。
為平滑實時地顯示快視圖像,可以采用雙緩沖或離屏圖面技術。
雙緩沖,即在緩沖區(qū)中繪制圖像,在完成接收一行或幾行數(shù)據(jù)后,將數(shù)據(jù)拷貝到顯示主圖面進行顯示。為緩沖區(qū)建立2個指針,一個是讀取指針,一個是寫入指針。外部圖像數(shù)據(jù)通過寫入指針,保存到系統(tǒng)內(nèi)存中,需要顯示的圖像數(shù)據(jù)通過讀取指針從內(nèi)存中獲取。這2個指針要求不能相互超越,即先寫后讀。針對主頻在3.0 G以上,內(nèi)存不小于1 G當前主流的計算機配置,此技術指標至少可以到達45 fps。雙緩沖技術流程如圖3所示。
離屏圖面技術則充分利用了硬件加速功能,離屏圖面是一個相對獨立的圖面,不與任何對象產(chǎn)生隸屬關系,所以在創(chuàng)建時要聲明離屏圖面的大小。在默認情況下,軟件在顯存中創(chuàng)建離屏圖面,當顯存容量不足時,DirectDraw將把離屏圖面置于系統(tǒng)內(nèi)存中。
圖3 雙緩沖操作流程圖
離屏圖面創(chuàng)建成功后,即可直接進行寫數(shù)據(jù)操作,然后利用圖面交換將離屏圖面中的圖像復制到主圖面,這種復制是利用硬件來實現(xiàn)的,沒有明顯的延遲,是雙緩沖技術遠不能及的。離屏圖面與主圖面交換實現(xiàn)過程如圖4所示。
圖4 離屏圖面與主圖面交換實現(xiàn)示意圖
單屏顯示器不能完整顯示幅寬過大的衛(wèi)星快視圖像,因此軟件采用全景顯示和條帶顯示2種方式。在全景顯示方式下,需要對圖像進行抽點;在條帶顯示方式下,根據(jù)圖像的整體寬度,決定圖像縱向條帶數(shù)量,對圖像進行分條帶顯示,可以根據(jù)需求,來選擇進行顯示的條帶號。
進行抽點顯示無疑降低了圖像顯示的分辨率,失去了圖像高清顯示的目的,而條帶顯示又不能全景觀察。為了解決此問題,可以建立多顯示器系統(tǒng)。在多顯示器系統(tǒng)中如果設置了普通的協(xié)作級別,只有窗口完全在主設備的顯示區(qū)內(nèi)才能使用硬件加速,若一個窗口同時在2臺或多臺顯示器上,那么圖面硬件方式的拷貝只能以仿真方式運行,處理性能會明顯變慢。
使用函數(shù)枚舉出系統(tǒng)中的所有顯示設備,并為每個設備創(chuàng)建單獨的DirectDraw對象,但與操作系統(tǒng)的協(xié)作級別只可設置一次,針對不同的DirectDraw對象分別設置主圖面、雙緩沖或離屏圖面。
在圖像顯示過程中,對圖像進行放大、縮小、漫游、光學增強和抽點顯示等方面的操作,可以采用DirectInput技術實現(xiàn)。在圖像滾動顯示時可以采用暫停緩沖區(qū)復制或暫停離屏頁面操作來達到圖像凝視的效果。
進行系統(tǒng)仿真與性能測試,需要建立快視數(shù)據(jù)發(fā)送系統(tǒng)、顯示系統(tǒng)并準備相關的快視圖像模擬數(shù)據(jù)。
在實際應用中,地面站可同時接收多顆衛(wèi)星下傳的快視圖像數(shù)據(jù),因此快視數(shù)據(jù)發(fā)送系統(tǒng)應建立多個發(fā)送端。
評價快視顯示系統(tǒng)的性能主要由快視圖像的接收速率和顯示速率來確定。
(1)系統(tǒng)仿真
快視數(shù)據(jù)發(fā)送系統(tǒng)由3臺處理器為1.7G,內(nèi)存為512M,顯存為64 M,并裝有可循環(huán)調速發(fā)送圖像數(shù)據(jù)模擬軟件的計算機組成。
快視數(shù)據(jù)顯示系統(tǒng)為一臺處理器為3.0 G,內(nèi)存為1 G,顯存為256 M,裝有使用VC6.0開發(fā)的快視數(shù)據(jù)顯示軟件的計算機。
快視圖像模擬數(shù)據(jù)包括像素數(shù)為2 048×4 000、4 096×4 000的8位及32位圖像。
(2)性能測試
在仿真環(huán)境下,發(fā)送端的3臺計算機同時向快視顯示系統(tǒng)循環(huán)發(fā)送快視數(shù)據(jù)。
數(shù)據(jù)傳輸速率MT可用式(1)表示,數(shù)據(jù)顯示速率MD可用式(2)表示。在式(1)、式(2)中C是數(shù)據(jù)發(fā)送端發(fā)送圖像的循環(huán)次數(shù),n代表數(shù)據(jù)發(fā)送系統(tǒng)中計算機的數(shù)量,i是發(fā)送系統(tǒng)中計算機的編號,h是圖像數(shù)據(jù)的高度,w是圖像數(shù)據(jù)的寬度,b是圖像的位深,B是顯示模式的位深,T代表數(shù)據(jù)傳輸?shù)臅r間。
當i=1,即接收單顆衛(wèi)星的快視數(shù)據(jù),并且B=bi時 ,MT=MD。
測試過程中,快視顯示系統(tǒng)(雙屏)的顯示模式設置為2048(寬)×1536(高)×32(位)。在480 s內(nèi),發(fā)送端第1臺計算機傳輸2048(寬)×4000(高)×8(位)的圖像42次;發(fā)送端第2臺計算機傳輸2048(寬)×4000(高)×32(位)的圖像38次;發(fā)送端第 3臺計算機傳輸4096(寬)×4000(高)×32(位)的圖像40次。根據(jù)公式計算出顯示端的顯示速率MD1、MD2、MD3分 別為22 Mbps,20Mbps,42 Mbps,傳 輸速率MT為69Mbps。此時系統(tǒng)能夠平滑顯示快視數(shù)據(jù),未出現(xiàn)圖像抖動、跳躍現(xiàn)象。
在單通道數(shù)據(jù)傳輸情況下,發(fā)送端在390 s內(nèi)傳輸4096(寬)×4000(高)×32(位)圖像56次,接收端(雙屏)顯示模式為2048(寬)×1536(高)×32(位),經(jīng)計算得MD=MT=72Mbps,此時快視圖像仍能保持平滑顯示。
DirectDraw技術是以組件對象模型(COM)的方式來實現(xiàn)的,可直接訪問顯示存儲器,對圖像像素數(shù)據(jù)進行讀寫及修改操作,由于在程序中DirectDraw優(yōu)先在顯存中創(chuàng)建主圖面和離屏圖面,如果顯存容量不足,便會將圖面放置在內(nèi)存中,這會影響硬件加速性能的利用,因此為使快視顯示系統(tǒng)達到更好的顯示效果,運行此系統(tǒng)的計算機需要具有較大的顯存。
與其他圖像顯示技術相比,DirectDraw技術在衛(wèi)星快視圖像數(shù)據(jù)顯示系統(tǒng)中已展現(xiàn)出其優(yōu)越的性能,同時可應用于無人機、飛艇遙感圖像的接收與顯示系統(tǒng)中。
[1]武永康.DirectDraw原理與API參考[M].北京:清華大學出版社,2000.
[2]LAMOTHE A.Tricks of The Windows Game Programming[M].北京:中國電力出版社,2004.
[3]甘 泉.PC游戲編程(DirectX 8)[M].北京:清華大學出版社,2003.
[4]DUNLOP R.DirectX 7速成教程[M].北京:機械工業(yè)出版社,2002.
[5]柳青松.基于DirectDraw的計算機圖像顯示[J].火控雷達技術,2004,32(3):76-78.