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