/* 1 パス ImageFilter Ver 0.10 */ /* */ /* */ /* by Atsushi 98/4/9 */ package net.antun.lib.awt.image; import java.awt.Dimension; import java.awt.Rectangle; import java.awt.image.ColorModel; import java.awt.image.ImageFilter; import java.util.Hashtable; public abstract class SinglepassImageFilter extends ImageFilter { /* --- Field --- */ protected int original[]; protected Dimension originalSize; protected static ColorModel defaultRGB=ColorModel.getRGBdefault(); /* --- Constructor --- */ public SinglepassImageFilter() { } /* --- フィルタリング --- */ public void setDimensions(int width,int height) { original =new int[width*height]; originalSize=new Dimension(width,height); } public void setPixels(int x,int y,int width,int height,ColorModel model, byte pixels[],int offset,int scansize) { for (int iy=0;iy<=height-1;iy++) { for (int ix=0;ix<=width-1;ix++) { original[x+ix+(y+iy)*originalSize.width]=model.getRGB( pixels[offset+ix+iy*scansize] & 0xff); } } } public void setPixels(int x,int y,int width,int height,ColorModel model, int pixels[],int offset,int scansize) { if (model==defaultRGB) { for (int iy=0;iy<=height-1;iy++) { System.arraycopy(pixels,offset+iy*scansize, original,x+(y+iy)*originalSize.width,width); } } else { for (int iy=0;iy<=height-1;iy++) { for (int ix=0;ix<=width-1;ix++) { original[x+ix+(y+iy)*originalSize.width]=model.getRGB( pixels[offset+ix+iy*scansize]); } } } } public void setHints(int hint) { consumer.setHints(SINGLEPASS | (hint & SINGLEFRAME)); } public void setColorModel(ColorModel model) { consumer.setColorModel(defaultRGB); } public void imageComplete(int status) { if (status==IMAGEERROR || status==IMAGEABORTED) { consumer.imageComplete(status); return; } filterImage(); consumer.imageComplete(status); } protected abstract void filterImage(); }