国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于VxWorks操作系統(tǒng)的雷達(dá)顯示軟件屏幕截圖技術(shù)研究

2010-06-28 03:04鄭元珠
艦船電子對抗 2010年2期
關(guān)鍵詞:圖像文件航跡像素

鄭元珠

(南京電子技術(shù)研究所,南京210013)

0 引 言

基于光柵掃描雷達(dá)顯示器的優(yōu)越性,現(xiàn)代雷達(dá)的終端一般采用光柵掃描雷達(dá)顯示器。目前雷達(dá)的終端顯示技術(shù)向小型化方向發(fā)展,并且集雷達(dá)分系統(tǒng)多種功能于一體。用戶對雷達(dá)終端顯示軟件的功能需求越來越復(fù)雜。

現(xiàn)代戰(zhàn)爭中,空情目標(biāo)復(fù)雜多變,雷達(dá)目標(biāo)常常是多方向、多批次和高速度的。操作員人工錄取目標(biāo)已經(jīng)不適合戰(zhàn)場需求,一般雷達(dá)系統(tǒng)已經(jīng)實(shí)現(xiàn)對目標(biāo)半自動(dòng)錄取和自動(dòng)錄取。同時(shí)希望對當(dāng)前的一些特殊空情態(tài)勢以靜態(tài)數(shù)字化圖片的形式真實(shí)保存下來供事后分析。終端畫面不僅具有實(shí)時(shí)顯示雷達(dá)信息功能,而且要求對畫面二次航跡圖形信息進(jìn)行保存,即雷達(dá)終端的顯控軟件必須具有“抓屏”功能。在系統(tǒng)運(yùn)行過程中,當(dāng)用戶按下鍵盤上某個(gè)功能按鍵或者鼠標(biāo)選擇某個(gè)菜單項(xiàng)時(shí),顯控軟件能夠?qū)?dāng)前屏幕的航跡信息以某種圖像文件的格式保存到計(jì)算機(jī)硬盤上,該圖像文件供事后情報(bào)分析處理使用。

雷達(dá)終端操作系統(tǒng)選擇必須充分考慮實(shí)時(shí)性、穩(wěn)定性、可靠性、安全性及多任務(wù)處理的需求。雷達(dá)小型化終端集數(shù)據(jù)處理、設(shè)備操作控制、顯示及情報(bào)上報(bào)等多功能于一體。該終端承擔(dān)與上級指揮所之間數(shù)據(jù)交換的功能,因此要求該終端系統(tǒng)必須具有很強(qiáng)的實(shí)時(shí)性。由于終端系統(tǒng)各個(gè)功能模塊間有一定的離散性和耦合性,因此要求系統(tǒng)中實(shí)現(xiàn)各個(gè)功能模塊的任務(wù)之間具有相對的獨(dú)立性和“并發(fā)性”,且各個(gè)任務(wù)根據(jù)不同“緊迫感”應(yīng)具有不同的優(yōu)先級。綜上所述,雷達(dá)系統(tǒng)要求終端系統(tǒng)具有實(shí)時(shí)處理多任務(wù)的能力。

根據(jù)以上多方面的要求和特點(diǎn),基于優(yōu)先級搶占式的多任務(wù)實(shí)時(shí)操作系統(tǒng)VxWorks便成為小型化雷達(dá)終端首選操作系統(tǒng)。它很好地解決了以往單任務(wù)模式的操作系統(tǒng)和以時(shí)間片為調(diào)度基礎(chǔ)的多任務(wù)操作系統(tǒng)在多任務(wù)處理和實(shí)時(shí)性之間的矛盾。與VxWorks實(shí)時(shí)操作系統(tǒng)配套的Tornado集成開發(fā)環(huán)境在軟件開發(fā)和調(diào)試方面所具有的靈活性,使得軟件開發(fā)周期大大縮短。

VxWorks操作系統(tǒng)是當(dāng)前應(yīng)用比較廣泛的嵌入式操作系統(tǒng)之一,其圖形環(huán)境接口支持OpenGL規(guī)范。目前嵌入式操作系統(tǒng)對圖形界面接口功能支持較弱,效率不高,這是目前業(yè)界研究的一個(gè)熱點(diǎn)。在Windows操作系統(tǒng)下,操作系統(tǒng)直接支持屏幕截圖功能,用戶只需按下鍵盤“Print Screen”按鍵,操作系統(tǒng)便能夠自動(dòng)將當(dāng)前屏幕信息拷貝到系統(tǒng)的剪貼板中,用戶再從剪貼板將該數(shù)據(jù)拷貝到相關(guān)應(yīng)用程序(如畫圖軟件或其它圖形軟件),再以指定的文件格式保存所截取的圖形數(shù)據(jù)??上xWorks操作系統(tǒng)不提供該方面的接口功能,一切需要應(yīng)用程序自己實(shí)現(xiàn)。

對于雷達(dá)光柵顯示系統(tǒng),若想獲得屏幕的所有顯示信息,最直接的方法是獲得顯卡中顯存的像素?cái)?shù)據(jù),依據(jù)該數(shù)據(jù)的格式進(jìn)行解包,然后再編碼以某種圖像文件格式保存到計(jì)算機(jī)硬盤。這需要顯卡的底層驅(qū)動(dòng)支持,而且開發(fā)人員必須熟悉顯示芯片的寄存器結(jié)構(gòu)及使用方法,同時(shí)廠家必須提供這方面的技術(shù)資料,實(shí)際上顯示芯片的一些關(guān)鍵資料常常是很難得到的。

針對上述情況,只有另僻蹊徑,嘗試從其它途徑尋找解決問題的方法。經(jīng)過努力,發(fā)現(xiàn)使用Open-GL的幀緩存技術(shù)可以獲得雷達(dá)終端顯示畫面目標(biāo)二次航跡信息,從而使該問題得到較完美的解決。

1 解決方案

1.1 OpenGL基本原理

OpenGL是圖形硬件的一個(gè)軟件接口,目前有多種操作系統(tǒng)支持該規(guī)范,VxWorks操作系統(tǒng)提供對該規(guī)范的接口功能。它的主要作用是將二維或三維的對象繪入一個(gè)幀緩沖區(qū)中。對象被描述為一系列的頂點(diǎn)(用來定義幾何對象)或像素(用來定義圖像)。OpenGL對數(shù)據(jù)進(jìn)行幾個(gè)步驟的處理從而將其轉(zhuǎn)換成像素,這些像素在幀緩沖區(qū)中形成最終需要的圖形。

在OpenGL中,圖形操作的基本對象(實(shí)體)為圖元,圖元分為幾何圖元和非幾何圖元。OpenGL基于所謂的“管道模型”(pipleline model)。圖形圖元在應(yīng)用程序內(nèi)部生成,并經(jīng)由管道傳送。管道中包含一系列模塊,每個(gè)模塊都對經(jīng)過的圖元采取一項(xiàng)或多項(xiàng)操作。有些模塊提供轉(zhuǎn)換功能,能旋轉(zhuǎn)、轉(zhuǎn)換或縮放對象,有些模塊負(fù)責(zé)對于OpenGL的照相機(jī)來定位對象;另一些模塊則判斷對象是否在照相機(jī)的視界內(nèi)。在管道的末尾,那些可見的圖元會(huì)被轉(zhuǎn)換成屏幕上的彩色像素。圖1表示了一種管道模型。

圖1 OpenGL管道模型

1.2 OpenGL幀緩存

在OpenGL中,每個(gè)圖像系統(tǒng)的背后都有一個(gè)用于生成圖像的幀緩存。幀緩存實(shí)際上是一個(gè)緩存集合。對于屏幕空間上的每個(gè)x,y值,都有與之相對應(yīng)的位組,該位組可以看作是通用圖片圖元或像素。這些像素可以由32位前臺(tái)緩存RGBA值、32位后臺(tái)緩存RGBA值和32位深度緩存值各位的合成。位組的大小通常是字節(jié)的整數(shù)倍。可以根據(jù)幀緩存中寫操作執(zhí)行的位置寫入深度像素或 RGBA像素。OpenGL允許使用一次函數(shù)調(diào)用來讀取或者寫入該類像素的矩形塊。該操作被稱為位塊傳輸操作。

讀取像素操作包括定位到幀緩存的正確位置并從該位置提取數(shù)據(jù)。然而實(shí)際情況并不是如此簡單,必須考慮像素格式在應(yīng)用程序、文件及幀緩存內(nèi)部的差別,還必須考慮不同體系存儲(chǔ)離散數(shù)據(jù)方式的差異給處理帶來的復(fù)雜性。

像素管道處理過程如圖2所示。

圖2 OpenGL像素管道模型

OpenGL提供了3個(gè)處理圖像數(shù)據(jù)的基本函數(shù):

(1)glReadPixel():從幀緩存中讀取一個(gè)矩形像素陣列,并將其存儲(chǔ)到處理器內(nèi)存中。

(2)glDrawPixel():從處理器內(nèi)存中讀取一個(gè)矩形像素陣列,并根據(jù)glRasterPos*()指定的當(dāng)前光柵位置,將其寫入到幀緩存中去。

(3)glCopyPixel():將一個(gè)矩形像素陣列從幀緩存的一個(gè)地方復(fù)制到另一個(gè)地方;其功能類似于調(diào)用glReadPixel()和glDrawPixel(),但不將數(shù)據(jù)寫入到處理器內(nèi)存。

在應(yīng)用程序中,主要用到glReadPixel()函數(shù),將像素從幀緩存轉(zhuǎn)移到系統(tǒng)內(nèi)存。該函數(shù)的原型為:

Void glReadPixels(Glint x,Glinty,GLsizei w,GLsizei h,GLenum format,Glenum type,GLvoid*array)。

該函數(shù)功能是從幀緩存的(x,y)開始,讀取w×h個(gè)像素矩形,放入計(jì)算機(jī)緩存array。像素格式由format指定,寫入數(shù)據(jù)類型是type。

雷達(dá)終端顯示軟件使用該函數(shù)獲取當(dāng)前幀緩存中顏色緩存數(shù)據(jù),然后進(jìn)行解包、編碼,保存圖像文件,實(shí)現(xiàn)屏幕“抓屏”功能。

1.3 BMP圖像文件格式

BMP圖像文件最早應(yīng)用于Microsoft Windows系統(tǒng),由于桌面操作系統(tǒng)的普及,對BMP圖像文件系統(tǒng)支持越來越多。BMP文件格式有以下特點(diǎn):

(1)設(shè)備獨(dú)立性,它以一種獨(dú)立于設(shè)備的方法描述位圖;

(2)可用非壓縮格式存儲(chǔ)圖像數(shù)據(jù),保證解碼速度快;

(3)支持多種圖像的存儲(chǔ)。

BMP圖像文件由以下幾部份組成:位圖文件頭(BITMAPHEADER)數(shù)據(jù)結(jié)構(gòu);位圖信息(BITMAPINFO)數(shù)據(jù)結(jié)構(gòu);位圖陣列。

各數(shù)據(jù)結(jié)構(gòu)的詳細(xì)格式及含義參見相關(guān)資料。由于BMP文件格式對圖像數(shù)據(jù)沒有壓縮,多操作系統(tǒng)支持,從OpenGL幀緩存所得到的數(shù)據(jù)不需要特殊處里,可以直接保存為bmp格式文件,所以選用該格式保存圖像數(shù)據(jù)。

1.4 部分程序代碼示例

程序部分代碼如下所示:

2 注意事項(xiàng)

2.1 像素分辨率

像素讀取的返回值受幀緩存分辨率限制。讀取像素值時(shí),首先應(yīng)該檢查當(dāng)前像素顏色分辨率位數(shù),可以使用類似下面查詢函數(shù)來確定位數(shù):glGetIntegerv(GL_RED_BITS,&nbits)。

2.2 選擇緩存

讀寫RGBA值時(shí),在幀緩存中處理顏色緩存。當(dāng)應(yīng)用程序在單緩存模式時(shí),默認(rèn)情形下,在Open-GL前臺(tái)顏色緩存(GL_FRONT)執(zhí)行讀和寫操作。在雙緩存模式中,默認(rèn)情形是在后臺(tái)(GL_BACK)繪制對象。

大多數(shù)OpenGL還支持其它顏色緩存。所以在程序中必須指定所操作的緩存對象,使用函數(shù)gl-ReadBuffer()為讀操作選擇一個(gè)緩存。

使用函數(shù)glReadPixels()來讀取RGBA或顏色索引時(shí),必須指出要從哪個(gè)緩存中讀取。例如,如果使用了雙緩存,必須指出要從前緩存還是后緩存讀取數(shù)據(jù)。為此,可使用函數(shù)glReadBuffer()選擇要讀取的緩存類型。

2.3 BMP文件大小計(jì)算

在本應(yīng)用程序中,每屏抓取后保存的BMP格式圖像文件大小計(jì)算如下:

假設(shè)雷達(dá)終端屏幕顯示分辨率為1600×1 200,每像素顏色采用24位表示,以非壓縮格式保存。位圖文件頭為14字節(jié),位圖信息結(jié)構(gòu)體長度為40字節(jié),則保存后文件大小為:1 600×1 200×3+14+54=5 760 054字節(jié)。

上述文件占用空間較多,在任務(wù)執(zhí)行完畢,可以將上述文件拷貝到Windows操作系統(tǒng)下,運(yùn)行其它圖像處理軟件(如PhtoShop,ACDsee等軟件),將上述BMP文件進(jìn)行壓縮或者轉(zhuǎn)換為其它格式圖形文件(如JPEG格式)。

之所以沒有進(jìn)行實(shí)時(shí)壓縮,主要考慮到圖像壓縮處理運(yùn)算需要消耗較多的計(jì)算機(jī)資源,對顯示軟件的其它任務(wù)運(yùn)行會(huì)產(chǎn)生一定的影響,所以留到任務(wù)結(jié)束后再處理。因?yàn)橹灰@得了顯卡的原始顯示數(shù)據(jù),圖像數(shù)據(jù)的后續(xù)處理技術(shù)途徑較多,不再贅述。

3 結(jié)束語

采用OpenGL幀緩存操作技術(shù)和BMP圖像文件技術(shù)解決了VxWorks操作系統(tǒng)下雷達(dá)終端顯示軟件對目標(biāo)航跡圖像獲取及保存問題。實(shí)踐證明在目前應(yīng)用條件下,該項(xiàng)技術(shù)的應(yīng)用滿足用戶對雷達(dá)系統(tǒng)的功能需求。圖3所示為VxWorks操作系統(tǒng)下所獲得的雷達(dá)屏幕二次航跡圖像信息文件在Microsoft Window s操作系統(tǒng)下的顯示。圖像文件格式為BMP,用普通的圖像文件瀏覽器就能查看。該二次航跡信息與屏幕航跡信息一致,無信息丟失。目前在顯示軟件中僅用到OpenGL幀緩存中的顏色緩存,沒有使用到深度緩存、累積緩存等其它緩存。幀緩存中其它緩存對屏幕“截圖”結(jié)果的影響及處理有待后續(xù)工作中進(jìn)一步探索。

圖3 雷達(dá)二次航跡圖像文件在Microsoft Windows下恢復(fù)顯示(部分畫面)

[1]丁鷺飛.雷達(dá)原理[M].第3版.西安:西安電子科技大學(xué)出版社,2002.

[2]Edward Angel(美).OpenGL程序設(shè)計(jì)指南[M].第2版.李桂瓊譯.北京:清華大學(xué)出版社,2005.

[3]董士海.圖像格式編程指南[M].北京:清華大學(xué)出版社,1995.

猜你喜歡
圖像文件航跡像素
像素前線之“幻影”2000
夢的航跡
“像素”仙人掌
自適應(yīng)引導(dǎo)長度的無人機(jī)航跡跟蹤方法
圖像電子文件的歸檔格式及其轉(zhuǎn)換研究
視覺導(dǎo)航下基于H2/H∞的航跡跟蹤
高像素不是全部
基于航跡差和航向差的航跡自動(dòng)控制算法
兩步把PDF轉(zhuǎn)為Word文檔
《圖像文件探尋之旅——圖像文件概述》教學(xué)設(shè)計(jì)及反思