是可以过滤的,画的时候不要设背景填充色。
下面代码先生成一个紫色不透明的图,再过滤成透明色,在显示时因为透明露出背景的一块绿。import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.awt.image.FilteredImageSource;
import java.awt.image.RGBImageFilter;
public class Test extends Applet{
private Image img;
public void init(){
//先生成一张不透明的紫色背景图
BufferedImage pimg=new BufferedImage(400,400,BufferedImage.TYPE_INT_RGB);//无alpha
Graphics g=pimg.getGraphics();
g.setColor(new Color(0xff00ff));
g.fillRect(0, 0,pimg.getWidth(), pimg.getHeight());
g.setColor(Color.BLACK);
g.drawString("不透明的紫色1", 30, 30);
//把不透明的图过滤成透明的
img =Toolkit.getDefaultToolkit().createImage(
new FilteredImageSource(pimg.getSource(),new RGBImageFilter(){
@Override public int filterRGB(int x, int y, int rgb) {
return ((rgb&0xffffff) ==0xff00ff) ? 0:rgb;
}
}
));
}
public void paint(Graphics g){
g.setColor(Color.GREEN);
g.fillRect(0, 0, 40, 20);
g.drawImage(img, 0,0,null);//不要设背景填充色!!!!
}
}