APP下载

视频展台变焦操作的虚拟实验

2009-10-26辛允东

新媒体研究 2009年13期
关键词:数组变焦像素

辛允东

[摘要]视频展台是教学中常用的辅助媒体,正确熟练的使用可以大大提高教学效率和效果。展台调节功能中的其中一个就是变焦调节,通过变焦可以看到被投影物体的局部或全部信息。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.

猜你喜欢

数组变焦像素
JAVA稀疏矩阵算法
JAVA玩转数学之二维数组排序
“像素”仙人掌
数码变焦不好用?
更高效用好 Excel的数组公式
合理变焦拍远景
怎么变焦是个问题
高像素不是全部
佳能推出大变焦比相机
寻找勾股数组的历程