你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 图形图象处理与游戏编程
图像透明度在具有立体感动画制作中的应用(二)
 

6. ImageConsumer接口和PixelGrabber

  接口ImageConsumer用于从图像中提取像素数据,并将这些数据以另一种数据类型方式表示出来。与前面的类ImageProducer接口在功能上相反。一个实现ImageConsumer接口的对像将生成intbyte类型的数组,这些数组代表了一个Image对像的像素。

  用PixelGrabber类可以实现ImageConsumer接口。PixelGrabber类与MemoryImageSource类相反,它不是从像素数组中生成图像,而是从现存的图像中提取像素数组。要使用PixelGrabber,首先要定义一个足够大的int型数组来存储图像像素数据,然后生成一个PixelGrabber实例,将要提取的数据放在一个矩形中传递。最后,在这个实例中调用grabPixels()方法实现传递给数组pixel[]

  PixelGrabber的构造方法如下:

    PixelGrabber(Image imgObj, int left, int top,

int width, int height, int pixel[],

          int offset , int scanLineWidth);

此处imgObj是要被提取像素的对像。lefttop的值指定了矩形的左上角,widthheight指定了矩形的尺寸,这个矩形中像素是提取的目标。这些像素将被存储在以offset开始的像素数组pixel中,扫描线的宽(常与图像的宽相同)由参数scanLineWidth传递。

grabPixels()方法的定义如下:

boolean grabPixels() throws

                 InterruptedException

该方法成功时返回true,不成功则返回false

 

三、动画制作

 

1.前景图像透明度处理

本程序使用的前景图如图4

4 前景图

若前景图的背景部分不透明,在动画制作中会出现图5的现像。


5 前景图像不透明产生的效果

这样不会产生动画感。因此,必须对前景图背景部分的透明度作改变,使背景的透明度为全透明。

可以用一些图像处理软件,比如,用Photoshop或某些Windows版本自带的“画图”软件,改变背景的透明度。本文介绍用Java直接改变图像透明度,并对图像像素进行处理的方法。使用如下程序块改变前景图的背景透明度:

ColorModel cm=ColorModel.getRGBdefault();

for(int i=0;i<ih;i++){

   for(int j=0;j<iw;j++){

     int red,green,blue;

     red  =cm.getRed(pixels[i*iw+j]);      

     green=cm.getGreen(pixels[i*iw+j]);

     blue =cm.getBlue(pixels[i*iw+j]);

     if(red>230&&green>230&&blue>230)

       pixels[i*iw+j]=0<<24|red<<16|

green<<8|blue;

}

}

将图像白色背景的Alpha值设置为0,而其余像素的透明度和红、绿、蓝的值不改变。因为前景图的背景白色未必纯白色(255,255,255),所以在程序段中作了一些改变,将满足条件

red>230&&green>230&&blue>230

的像素都作为白色背景处理。

2.海水透明度处理

  仅仅对h>=220的海水部分进行透明度处理。参见图6。图6中白色部分的像素未画出。


6 海水图制作示意图

海水的透明度设计为

alpha=3*h-540;   (h>=220)

海水越深,透明度越大,即越不透明。为了加快计算机对图像的处理速度,本程序仅对h>=220的海水部分进行了处理,而其它部分的像素并不放在图像数组pixels内。这样处理的本质是在内存中将图6中处于白色部分的像素进行“剪切”,从而形成一幅全是海水的较小的图像。在画海水图时,也仅需画出海水部分。

3.云层透明度处理

云层的制作类似于海水制作。从背景图中0<=h<=90部分是云层,如图7。图7中,白色部分的像素未画出。云层的透明度设计为

alpha=220-2*h; (0<=h<=90)

云层越往上,透明度值越大,即越不透明。


7 云层图制作

对云层的处理也与海水部分相同,仅将云层0<=h<=90部分放入图像数组pixels中,“剪切”掉处于白色部分的图像像素,形成一幅较小的云层图。这样在作画时,也仅需画出云层图即可。
  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089