主要使用到的是java.awt.image.*包,继承rgbimagefilter类,对图片的像素进行alpha(透明度)进行修改,下面以applet为例:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.font.*;
import java.awt.image.*;
public class applet6 extends applet {
mediatracker mt;
image img=null;
image im=null;
imagefilter imgf=null;
filteredimagesource fis=null;
public void init() {
img=this.getimage(this.getcodebase(),"d.jpg");
mt=new mediatracker(this);
mt.addimage(img,0);
try {
mt.waitforall(0);
} catch(exception ex) {system.err.println(ex.tostring());}
im=this.createimage(100,100);//建立新的图片,用于输入文字,以便接下来进行透明处理
graphics g2=im.getgraphics();
g2.setfont(new font("宋体",font.bold,15));
g2.drawstring("半透明文字",10,50);
imgf=new myimage(100,100,100);//调用自定义类进行对象构造
fis=new filteredimagesource(im.getsource(),imgf);//对图象的源(图象生产者)进行过滤处理,构造出filteredimagesource对象实例
im=this.createimage(fis);//通过filteredimagesource实例生成image
}
public void paint(graphics g) {
g.drawimage(img,0,0,this);//画出图片
g.drawimage(im,100,100,this);//添加半透明文字
}
}
class myimage extends rgbimagefilter {//抽象类rgbimagefilter是imagefilter的子类,继承它实现图象argb的处理
int width=0;
int height=0;
int alpha=0;
public myimage(int width,int height,int alpha) {//构造器,用来接收需要过滤图象的尺寸,以及透明度
this.canfilterindexcolormodel=true;
//transparentimagefilter类继承自rgbimagefilter,它的构造函数要求传入原始图象的宽度和高度。该类实现了filterrgb抽象函数,缺省的方式下,该函数将x,y所标识的象素的argb值传入,程序员按照一定的程序逻辑处理后返回该象素新的argb值
this.width=width;
this.height=height;
this.alpha=alpha;
}
public int filterrgb(int x,int y,int rgb) {
directcolormodel dcm=(directcolormodel)colormodel.getrgbdefault();
//directcolormodel类用来将argb值独立分解出来
int red=dcm.getred(rgb);
int green=dcm.getgreen(rgb);
int blue=dcm.getblue(rgb);
if(red==255&&green==255&&blue==255)//如果像素为白色,则让它透明
alpha=0;
return alpha<<24|red<<16|green<<8|blue;//进行标准argb输出以实现图象过滤
}
}
闽公网安备 35060202000074号