| |
主要使用到的是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输出以实现图象过滤 } }
|
|