辛允東
[摘要]視頻展臺是教學(xué)中常用的輔助媒體,正確熟練的使用可以大大提高教學(xué)效率和效果。展臺調(diào)節(jié)功能中的其中一個就是變焦調(diào)節(jié),通過變焦可以看到被投影物體的局部或全部信息。Vrml語言和Java語言是做虛擬實驗的常用工具,就是用這兩種語言實現(xiàn)變焦功能的。
[關(guān)鍵詞]VrmlJava虛擬實驗視頻展臺變焦
中圖分類號:TP3文獻標識碼:A文章編號:1671-7597(2009)0710027-01
隨著計算機技術(shù)的迅速發(fā)展,虛擬現(xiàn)實技術(shù)已很成熟,廣泛應(yīng)用于各行各業(yè)。虛擬現(xiàn)實技術(shù)憑借其強大的交互功能,在教育領(lǐng)域中應(yīng)用也很廣泛。將虛擬現(xiàn)實技術(shù)應(yīng)用到教育中,主要是開發(fā)虛擬實驗。Vrml是開發(fā)虛擬實驗的主流語言,能夠構(gòu)建逼真的實驗環(huán)境。將Vrml與Java相結(jié)合,通過通信接口實現(xiàn)了VRML場景與網(wǎng)頁中各個嵌入式對象之間互相方便的通信,使VRML場景成為網(wǎng)絡(luò)表現(xiàn)的一部分。同時,也使用戶能夠動態(tài)的改變VRML場景和java applet中圖像的顯示。
視頻展臺是教學(xué)中最常用的輔助教學(xué)工具之一。這里主要探討了視頻展臺變焦功能的設(shè)計以及實現(xiàn)方法。
一、視頻展臺變焦實驗的設(shè)計
(一)實驗設(shè)計目的
通過視頻展臺模型的展示、變焦操作的模擬,讓學(xué)習(xí)者學(xué)習(xí)掌握變焦操作。
(二)實驗過程設(shè)計
首先,進入實驗室,對展臺的結(jié)構(gòu)有一個整體的了解,認識展臺變焦按鈕,有一個是放大圖像的,另一個是縮小圖像的。
然后,對展臺進行變焦調(diào)節(jié)操作,并且在實驗操作的過程中,能實時的看到操作結(jié)果。
(三)實驗環(huán)境的設(shè)計
虛擬實驗環(huán)境的組成比較簡單,就是一個視頻展臺,一副銀幕以及一個實驗臺。其中的關(guān)鍵就是制作視頻展臺。制作的方法主要有兩種:一是用3DMAX制作完后,再轉(zhuǎn)化成vrml格式的文件,以便在vrml環(huán)境中對各種交互進行編程;二是直接用vrml語言來編寫。兩種方法各有各的長處。用3DMAX制作的實驗器材比較精細、逼真,但,在轉(zhuǎn)換程vrml格式的時候會有一些小錯誤,需要人工修改;直接用vrml編寫,做出來的器材的逼真度不如3DMAX,但編寫起來方便。這里,采用第一種方法。
(四)交互功能的設(shè)計
Java處理圖像的功能很強大,因此可以利用Java來模擬變焦操作。虛擬實驗分為兩部分。一是虛擬場景,在虛擬場景里面,學(xué)習(xí)者可以對視頻展臺的組成部分進行了解,了解變焦操作按鈕有兩個,一個是放大投影材料圖像的,一個是縮小投影材料圖像的;二是Applet圖像顯示區(qū),將變焦后的圖像顯示出來。將鼠標放在變焦按鈕上按下去的時候,便可以發(fā)生交互,將交互產(chǎn)生的參數(shù)傳遞到Java applet中,根據(jù)虛擬場景交互產(chǎn)生的數(shù)據(jù)對圖像進行處理,將變化了的圖像顯示出來,模擬變焦操作。
(五)虛擬場景與Java applet傳遞數(shù)據(jù)的方法
首先,在虛擬場景腳本里面加入下列語句,訪問網(wǎng)頁中的腳本。
document.applet.bianjiao(bianjiaoshu);
“bianjiaoshu”便是從虛擬場景中產(chǎn)生的參數(shù),通過上面這個語句便將參數(shù)傳遞到了Java中。
最后,Java根據(jù)這個參數(shù)對圖像進行變焦處理,最后將處理好的圖像顯示出來。
二、視頻展臺變焦實驗的實現(xiàn)
實現(xiàn)方法主要有兩種:
一是準備好預(yù)制圖片,操作時一一進行顯現(xiàn)。需要放大圖片局部的時候,呈現(xiàn)逐步變大的圖像;需要縮小圖像瀏覽大圖的時候,呈現(xiàn)逐步變小的圖像。這種做法的不足之處是實驗不夠形象逼真,且當有多幅圖片進行變焦時需要準備很多的圖片,比較費時費力。
二是利用Java對圖像進行處理以模擬變焦。Java有豐富的類,可以方便的對圖像進行處理。這樣既能實現(xiàn)對圖片的變焦操作,又省去了制作圖片的麻煩。
二者相比,第二種方法比較可行。通過變焦操作可以放大或縮小圖像,用于觀察細節(jié)或全圖。變焦操作的實現(xiàn)主要有兩種方法。
1.采用了Java圖像操作中的CropImageFilter過濾器,通過裁剪圖像的方法來實現(xiàn)近似的變焦操作。[1]
首先,在VRML場景中,對變焦按鈕的單擊做一設(shè)置,使其每次單擊時產(chǎn)生一個動態(tài)的變量,用該變量作為applet中控制變焦的參數(shù)。
最后,通過這個動態(tài)參數(shù),實現(xiàn)對圖像的變焦控制。部分代碼如下:
x=(i+1)*32;y=(i+1)*24;width=1024-2*x;height=768-2*y;
cropFilter=new CropImageFilter(x,y,width,height);
cropimage=Toolkit.getDefaultToolkit().createImage(new FilteredImageSou
rce(picture.getSource(),cropFilter));
其中,i為動態(tài)參數(shù),x、y、width、height分別為截取圖像的縱橫坐標和寬度高度。將剪切好的圖像在顯示在applet中,實現(xiàn)變焦操作。顯示圖像的方法如下:
public void paint(Graphics g)
{ g.clearRect(0,0,w,h);
if(cropimage!=null)
g.drawImage(cropimage,0,0,w,h,this);
}
2.數(shù)組方法
圖像是由像素組成的,通過截取圖像的部分或全部像素在applet中顯示,近似的模擬變焦操作。
首先,獲取圖像的全部像素,通過PixelGrabber函數(shù)將圖像的像素讀入到一個數(shù)組中[2],方法如下:
PixelGrabber(Image bufinitig,int x,int y,int w,int h,int[]pixels,int off,int scansize);
其中,bufinitig是要讀取的圖像,x,y,w,h指明了要抓取像素的一個矩形范圍,pixels是保存像素的數(shù)組,off表示數(shù)組中存儲第一個像素的位置偏移量,通常取0,scansize是數(shù)組中一行到下一行的距離,即每一行的掃描值,通常取圖像的寬度。
然后,新建一個數(shù)組,通過數(shù)組的方法將圖像的部分像素存入這個數(shù)組,在applet中顯示。部分代碼如下:
int newPixel[]=new int[w*h];
int i,j;
for(i=0;i for(j=0;j newPixel[i*width+j]=pixels[(i+y)*initWidth+x+j]; cropImg=createImage(new MemoryImageSource(width,height,newPi xel,0,width)); if(bufg!=null) bufg.drawImage(cropImg,0,0,this); x、y、width、height是根據(jù)從虛擬環(huán)境傳遞過來的動態(tài)參數(shù)進行設(shè)置的參數(shù)。根據(jù)這四個參數(shù)來設(shè)置截取圖像的大小范圍。將截取的部分圖像存于cropImage中,再顯示在applet中。 這里只是實現(xiàn)了視頻展臺虛擬實驗的變焦功能。還有很多擴展的地方,如亮度變化、正負片的轉(zhuǎn)換等等。這里不能一一細述,有待以后進一步完善。 參考文獻: [1]正片[EB/OL].http://baike.baidu.com/view/215447.htm,2008-07-12. [2]負片[EB/OL].http://baike.baidu.com/view/215436.htm,2008-07-12. [3]李敏、丁友東,JAVA圖形與動畫編程實例[M].北京:清華大學(xué)出版社,2003.