Frames | No Frames |
1: /* Copyright (C) 2004 Free Software Foundation 2: 3: This file is part of GNU Classpath. 4: 5: GNU Classpath is free software; you can redistribute it and/or modify 6: it under the terms of the GNU General Public License as published by 7: the Free Software Foundation; either version 2, or (at your option) 8: any later version. 9: 10: GNU Classpath is distributed in the hope that it will be useful, but 11: WITHOUT ANY WARRANTY; without even the implied warranty of 12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13: General Public License for more details. 14: 15: You should have received a copy of the GNU General Public License 16: along with GNU Classpath; see the file COPYING. If not, write to the 17: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 18: 02110-1301 USA. 19: 20: Linking this library statically or dynamically with other modules is 21: making a combined work based on this library. Thus, the terms and 22: conditions of the GNU General Public License cover the whole 23: combination. 24: 25: As a special exception, the copyright holders of this library give you 26: permission to link this library with independent modules to produce an 27: executable, regardless of the license terms of these independent 28: modules, and to copy and distribute the resulting executable under 29: terms of your choice, provided that you also meet, for each linked 30: independent module, the terms and conditions of the license of that 31: module. An independent module is a module which is not derived from 32: or based on this library. If you modify this library, you may extend 33: this exception to your version of the library, but you are not 34: obligated to do so. If you do not wish to do so, delete this 35: exception statement from your version. */ 36: 37: package java.awt.image; 38: 39: import java.awt.Point; 40: 41: /** 42: * The BufferedImageFilter class wraps BufferedImageOp objects in a Filter. 43: * 44: * When pixels are pushed through the filter, we create a BufferedImage, 45: * apply the BufferedImageOp, and pass the filtered pixels to the base class. 46: * 47: * @author jlquinn@optonline.net 48: */ 49: public class BufferedImageFilter extends ImageFilter implements Cloneable 50: { 51: private BufferedImageOp op; 52: 53: /** 54: * 55: */ 56: public BufferedImageFilter(BufferedImageOp op) 57: { 58: super(); 59: if (op == null) 60: throw new NullPointerException("BufferedImageFilter null" 61: + " op in constructor"); 62: this.op = op; 63: } 64: 65: /** 66: * @return Returns the contained BufferedImageOp. 67: */ 68: public BufferedImageOp getBufferedImageOp() 69: { 70: return op; 71: } 72: 73: // FIXME: Definitely not sure this is the right thing. I'm not sure how to 74: // create a compatible sample model that incorporates scansize != w. I 75: // asume off is handled by the db itself. 76: public void setPixels(int x, int y, int w, int h, ColorModel model, 77: byte[] pixels, int off, int scansize) 78: { 79: // Create an input BufferedImage 80: DataBufferByte db = new DataBufferByte(pixels, scansize * h + off, off); 81: SampleModel sm = model.createCompatibleSampleModel(scansize, h); 82: WritableRaster wr = new WritableRaster(sm, db, new Point(0, 0)); 83: BufferedImage in = 84: new BufferedImage(model, wr, model.isAlphaPremultiplied(), null); 85: BufferedImage out = op.createCompatibleDestImage(in, model); 86: op.filter(in, out); 87: DataBuffer dbout = out.getRaster().getDataBuffer(); 88: super.setPixels(0, 0, w, h, model, ((DataBufferByte)dbout).getData(), 0, 89: scansize); 90: } 91: 92: // FIXME: Definitely not sure this is the right thing. I'm not sure how 93: // to create a compatible sample model that incorporates 94: // scansize != w. I asume off is handled by the db itself. 95: public void setPixels(int x, int y, int w, int h, ColorModel model, 96: int[] pixels, int off, int scansize) 97: { 98: // Create an input BufferedImage 99: DataBufferInt db = new DataBufferInt(pixels, scansize * h + off, off); 100: SampleModel sm = model.createCompatibleSampleModel(scansize, h); 101: WritableRaster wr = new WritableRaster(sm, db, new Point(0, 0)); 102: BufferedImage in = 103: new BufferedImage(model, wr, model.isAlphaPremultiplied(), null); 104: BufferedImage out = op.createCompatibleDestImage(in, model); 105: op.filter(in, out); 106: DataBuffer dbout = out.getRaster().getDataBuffer(); 107: super.setPixels(0, 0, w, h, model, ((DataBufferInt)dbout).getData(), 0, 108: scansize); 109: } 110: }