辛允東
[摘要]視頻展臺是教學中常用的輔助媒體,正確熟練的使用可以大大提高教學效率和效果。展臺調節功能中的其中一個就是變焦調節,通過變焦可以看到被投影物體的局部或全部信息。Vrml語言和Java語言是做虛擬實驗的常用工具,就是用這兩種語言實現變焦功能的。
[關鍵詞]VrmlJava虛擬實驗視頻展臺變焦
中圖分類號:TP3文獻標識碼:A文章編號:1671-7597(2009)0710027-01
隨著計算機技術的迅速發展,虛擬現實技術已很成熟,廣泛應用于各行各業。虛擬現實技術憑借其強大的交互功能,在教育領域中應用也很廣泛。將虛擬現實技術應用到教育中,主要是開發虛擬實驗。Vrml是開發虛擬實驗的主流語言,能夠構建逼真的實驗環境。將Vrml與Java相結合,通過通信接口實現了VRML場景與網頁中各個嵌入式對象之間互相方便的通信,使VRML場景成為網絡表現的一部分。同時,也使用戶能夠動態的改變VRML場景和java applet中圖像的顯示。
視頻展臺是教學中最常用的輔助教學工具之一。這里主要探討了視頻展臺變焦功能的設計以及實現方法。
一、視頻展臺變焦實驗的設計
(一)實驗設計目的
通過視頻展臺模型的展示、變焦操作的模擬,讓學習者學習掌握變焦操作。
(二)實驗過程設計
首先,進入實驗室,對展臺的結構有一個整體的了解,認識展臺變焦按鈕,有一個是放大圖像的,另一個是縮小圖像的。
然后,對展臺進行變焦調節操作,并且在實驗操作的過程中,能實時的看到操作結果。
(三)實驗環境的設計
虛擬實驗環境的組成比較簡單,就是一個視頻展臺,一副銀幕以及一個實驗臺。其中的關鍵就是制作視頻展臺。制作的方法主要有兩種:一是用3DMAX制作完后,再轉化成vrml格式的文件,以便在vrml環境中對各種交互進行編程;二是直接用vrml語言來編寫。兩種方法各有各的長處。用3DMAX制作的實驗器材比較精細、逼真,但,在轉換程vrml格式的時候會有一些小錯誤,需要人工修改;直接用vrml編寫,做出來的器材的逼真度不如3DMAX,但編寫起來方便。這里,采用第一種方法。
(四)交互功能的設計
Java處理圖像的功能很強大,因此可以利用Java來模擬變焦操作。虛擬實驗分為兩部分。一是虛擬場景,在虛擬場景里面,學習者可以對視頻展臺的組成部分進行了解,了解變焦操作按鈕有兩個,一個是放大投影材料圖像的,一個是縮小投影材料圖像的;二是Applet圖像顯示區,將變焦后的圖像顯示出來。將鼠標放在變焦按鈕上按下去的時候,便可以發生交互,將交互產生的參數傳遞到Java applet中,根據虛擬場景交互產生的數據對圖像進行處理,將變化了的圖像顯示出來,模擬變焦操作。
(五)虛擬場景與Java applet傳遞數據的方法
首先,在虛擬場景腳本里面加入下列語句,訪問網頁中的腳本。
document.applet.bianjiao(bianjiaoshu);
“bianjiaoshu”便是從虛擬場景中產生的參數,通過上面這個語句便將參數傳遞到了Java中。
最后,Java根據這個參數對圖像進行變焦處理,最后將處理好的圖像顯示出來。

二、視頻展臺變焦實驗的實現
實現方法主要有兩種:
一是準備好預制圖片,操作時一一進行顯現。需要放大圖片局部的時候,呈現逐步變大的圖像;需要縮小圖像瀏覽大圖的時候,呈現逐步變小的圖像。這種做法的不足之處是實驗不夠形象逼真,且當有多幅圖片進行變焦時需要準備很多的圖片,比較費時費力。
二是利用Java對圖像進行處理以模擬變焦。Java有豐富的類,可以方便的對圖像進行處理。這樣既能實現對圖片的變焦操作,又省去了制作圖片的麻煩。
二者相比,第二種方法比較可行。通過變焦操作可以放大或縮小圖像,用于觀察細節或全圖。變焦操作的實現主要有兩種方法。
1.采用了Java圖像操作中的CropImageFilter過濾器,通過裁剪圖像的方法來實現近似的變焦操作。[1]
首先,在VRML場景中,對變焦按鈕的單擊做一設置,使其每次單擊時產生一個動態的變量,用該變量作為applet中控制變焦的參數。
最后,通過這個動態參數,實現對圖像的變焦控制。部分代碼如下:
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為動態參數,x、y、width、height分別為截取圖像的縱橫坐標和寬度高度。將剪切好的圖像在顯示在applet中,實現變焦操作。顯示圖像的方法如下:
public void paint(Graphics g)
{ g.clearRect(0,0,w,h);
if(cropimage!=null)
g.drawImage(cropimage,0,0,w,h,this);
}
2.數組方法
圖像是由像素組成的,通過截取圖像的部分或全部像素在applet中顯示,近似的模擬變焦操作。
首先,獲取圖像的全部像素,通過PixelGrabber函數將圖像的像素讀入到一個數組中[2],方法如下:
PixelGrabber(Image bufinitig,int x,int y,int w,int h,int[]pixels,int off,int scansize);
其中,bufinitig是要讀取的圖像,x,y,w,h指明了要抓取像素的一個矩形范圍,pixels是保存像素的數組,off表示數組中存儲第一個像素的位置偏移量,通常取0,scansize是數組中一行到下一行的距離,即每一行的掃描值,通常取圖像的寬度。
然后,新建一個數組,通過數組的方法將圖像的部分像素存入這個數組,在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是根據從虛擬環境傳遞過來的動態參數進行設置的參數。根據這四個參數來設置截取圖像的大小范圍。將截取的部分圖像存于cropImage中,再顯示在applet中。 這里只是實現了視頻展臺虛擬實驗的變焦功能。還有很多擴展的地方,如亮度變化、正負片的轉換等等。這里不能一一細述,有待以后進一步完善。 參考文獻: [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].北京:清華大學出版社,2003.