/* BufferFilter - non-solar version. * * Buffers all data before sending it to next filter. * If you want to, you can invoke this filter from another filter. See * technique used in CircleWaveFilter. * * Written by Marcus Hoverby. Copyright (c) 1997 Marcus Hoverby. * You may modify and distribute this example for non-commercial * purposes. This code is provided without warranty. */ import java.awt.image.*; /** * The ImageFilter BufferFilter buffers the image data sent here and delivers * the image in one piece. If you want to, you can invoke this filter from * another filter. See technique used in CircleWaveFilter. * @author Marcus Hoverby * @version v1.0 * @see java.awt.image.ImageFilter */ public class BufferFilter extends ImageFilter { private int width; private int height; private ColorModel colormodel; private boolean isint; private int[] intbuffer=null; private byte[] bytebuffer=null; /** * Constructor */ public BufferFilter() { } /** * setPixels for images in direct format. */ public void setPixels(int x, int y, int w, int h, ColorModel cm, int[] pix, int offset, int scansize) { //allready buffered? if ((x==0) && (h==height) && (offset==0) && (scansize==w)) intbuffer = pix; else if (intbuffer==null) intbuffer = new int[width*height]; for (int cy=0; cy < h; cy++) { for (int cx=0; cx < w; cx++) { intbuffer[(cy+y)*width + cx] = pix[cy*scansize + cx + offset]; } } colormodel = cm; isint = true; } /** * setPixels for images in indexed format. */ public void setPixels(int x, int y, int w, int h, ColorModel cm, byte[] pix, int offset, int scansize) { //allready buffered? if ((x==0) && (h==height) && (offset==0) && (scansize==w)) bytebuffer = pix; else if (bytebuffer==null) bytebuffer = new byte[width*height]; for (int cy=0; cy < h; cy++) { for (int cx=0; cx < w; cx++) { bytebuffer[(cy+y)*width + cx] = pix[cy*scansize + cx + offset]; } } colormodel = cm; isint = false; } /** * The image is complete and is ready to be sent to next filter. */ public void imageComplete(int status) { if (isint && (intbuffer != null)) consumer.setPixels(0, 0, width, height, colormodel, intbuffer, 0, width); else if (bytebuffer != null) consumer.setPixels(0, 0, width, height, colormodel, bytebuffer, 0, width); consumer.imageComplete(status); intbuffer = null; bytebuffer = null; } /** * setDimensions in invoked by the ImageProducer and tells us how large * the image is. */ public void setDimensions(int w, int h) { intbuffer = null; bytebuffer = null; width = w; height = h; consumer.setDimensions(w, h); } } /*################# End of class CircleWaveFilter #################*/