62,616
社区成员
发帖
与我相关
我的任务
分享
import java.awt.Color;
import java.awt.image.*;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.io.File;
import java.io.FileInputStream;
import javax.imageio.ImageIO;
public class MyFilter extends RGBImageFilter {// 抽象类RGBImageFilter是ImageFilter的子类,
public static void main(String[] args) {
try {
BufferedImage imageBiao = ImageIO.read(new FileInputStream("e:\\1.png"));
ImageFilter imgf = new MyFilter(Color.WHITE.getRGB()); //白色
FilteredImageSource fis = new FilteredImageSource(imageBiao.getSource(), imgf);
Image im = Toolkit.getDefaultToolkit().createImage(fis);
im.flush();
BufferedImage newImage = new BufferedImage(imageBiao.getWidth(), imageBiao.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g = newImage.createGraphics();
g.drawImage(im, 0, 0, null);
g.dispose();
newImage.flush();
ImageIO.write(newImage, "png", new File("e:\\b.png"));
// 把以上原图和加上图标后的图像
} catch (Exception e) {
e.printStackTrace();
}
}
// 继承它实现图象ARGB的处理
int rgb = 0;
public MyFilter(int rgb) {// 构造器,用来接收需要过滤图象的尺寸,以及透明度
this.canFilterIndexColorModel = true;
this.rgb = rgb;
}
DirectColorModel dcm = (DirectColorModel) ColorModel.getRGBdefault();
public int filterRGB(int x, int y, int rgb) {
int alp = dcm.getAlpha(rgb);
if (dcm.getRGB(rgb) == dcm.getRGB(this.rgb)/* || alp == 0*/) {// 如果像素为白色,则让它透明
alp = 0;
// return Color.black.getRGB();//测试,透明的变成黑色
}
return alp << 24 | dcm.getRGB(rgb);// 进行标准ARGB输出以实现图象过滤
}
/*//这样不是再简单
public int filterRGB(int x, int y, int rgb) {
if ((this.rgb & 0xffffff) == (rgb & 0xffffff)) {
return 0;
}
return rgb;
}
*/
}