summaryrefslogtreecommitdiffstats
path: root/awt/java/awt/image/BufferedImageFilter.java
diff options
context:
space:
mode:
Diffstat (limited to 'awt/java/awt/image/BufferedImageFilter.java')
-rw-r--r--awt/java/awt/image/BufferedImageFilter.java397
1 files changed, 0 insertions, 397 deletions
diff --git a/awt/java/awt/image/BufferedImageFilter.java b/awt/java/awt/image/BufferedImageFilter.java
deleted file mode 100644
index 8b6fcf0..0000000
--- a/awt/java/awt/image/BufferedImageFilter.java
+++ /dev/null
@@ -1,397 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/**
- * @author Oleg V. Khaschansky
- * @version $Revision$
- */
-
-package java.awt.image;
-
-import org.apache.harmony.awt.gl.AwtImageBackdoorAccessor;
-import org.apache.harmony.awt.internal.nls.Messages;
-
-/**
- * The BufferedImageFilter class provides filtering operations to the
- * BufferedImage objects using operators which implement BufferedImageOp
- * interface.
- *
- * @since Android 1.0
- */
-public class BufferedImageFilter extends ImageFilter implements Cloneable {
-
- /**
- * The Constant accessor.
- */
- private static final AwtImageBackdoorAccessor accessor = AwtImageBackdoorAccessor.getInstance();
-
- /**
- * The op.
- */
- private BufferedImageOp op;
-
- /**
- * The raster.
- */
- private WritableRaster raster;
-
- /**
- * The i data.
- */
- private int iData[];
-
- /**
- * The b data.
- */
- private byte bData[];
-
- /**
- * The width.
- */
- private int width;
-
- /**
- * The height.
- */
- private int height;
-
- /**
- * The cm.
- */
- private ColorModel cm;
-
- /**
- * The forced rgb.
- */
- private boolean forcedRGB = false;
-
- /**
- * The transfer type.
- */
- private int transferType = DataBuffer.TYPE_UNDEFINED;
-
- /**
- * Instantiates a new BufferedImageFilter with the specified BufferedImageOp
- * operator.
- *
- * @param op
- * the specified BufferedImageOp operator.
- * @throws NullPointerException
- * if BufferedImageOp is null.
- */
- public BufferedImageFilter(BufferedImageOp op) {
- if (op == null) {
- throw new NullPointerException(Messages.getString("awt.05")); //$NON-NLS-1$
- }
- this.op = op;
- }
-
- /**
- * Gets the BufferedImageOp operator associated with this
- * BufferedImageFilter object.
- *
- * @return the BufferedImageOp associated with this BufferedImageFilter
- * object.
- */
- public BufferedImageOp getBufferedImageOp() {
- return op;
- }
-
- @Override
- public void setDimensions(int width, int height) {
- this.width = width;
- this.height = height;
- // Stop image consuming if no pixels expected.
- if (width <= 0 || height <= 0) {
- consumer.imageComplete(ImageConsumer.STATICIMAGEDONE);
- reset();
- }
- }
-
- @Override
- public void setColorModel(ColorModel model) {
- if (this.cm != null && this.cm != model && raster != null) {
- forceRGB();
- } else {
- this.cm = model;
- }
- }
-
- @Override
- public void setPixels(int x, int y, int w, int h, ColorModel model, byte[] pixels, int off,
- int scansize) {
- setPixels(x, y, w, h, model, pixels, off, scansize, true);
- }
-
- @Override
- public void setPixels(int x, int y, int w, int h, ColorModel model, int[] pixels, int off,
- int scansize) {
- setPixels(x, y, w, h, model, pixels, off, scansize, false);
- }
-
- @Override
- public void imageComplete(int status) {
- if (status == STATICIMAGEDONE || status == SINGLEFRAMEDONE) {
- BufferedImage bim = new BufferedImage(cm, raster, cm.isAlphaPremultiplied, null);
- bim = op.filter(bim, null);
- DataBuffer dstDb = bim.getRaster().getDataBuffer();
- ColorModel dstCm = bim.getColorModel();
- int dstW = bim.getWidth();
- int dstH = bim.getHeight();
-
- consumer.setDimensions(dstW, dstH);
-
- if (dstDb.getDataType() == DataBuffer.TYPE_INT) {
- consumer.setColorModel(dstCm);
- consumer.setPixels(0, 0, dstW, dstH, dstCm, accessor.getDataInt(dstDb), 0, dstW);
- } else if (dstDb.getDataType() == DataBuffer.TYPE_BYTE) {
- consumer.setColorModel(dstCm);
- consumer.setPixels(0, 0, dstW, dstH, dstCm, accessor.getDataByte(dstDb), 0, dstW);
- } else {
- int dstData[] = bim.getRGB(0, 0, dstW, dstH, null, 0, dstW);
- dstCm = ColorModel.getRGBdefault();
- consumer.setColorModel(dstCm);
- consumer.setPixels(0, 0, dstW, dstH, dstCm, dstData, 0, dstW);
- }
- } else if (status == IMAGEERROR || status == IMAGEABORTED) {
- reset();
- }
-
- consumer.imageComplete(status);
- }
-
- /**
- * Sets the pixels.
- *
- * @param x
- * the x.
- * @param y
- * the y.
- * @param w
- * the w.
- * @param h
- * the h.
- * @param model
- * the model.
- * @param pixels
- * the pixels.
- * @param off
- * the off.
- * @param scansize
- * the scansize.
- * @param isByteData
- * the is byte data.
- */
- private void setPixels(int x, int y, int w, int h, ColorModel model, Object pixels, int off,
- int scansize, boolean isByteData) {
- // Check bounds
- // Need to copy only the pixels that will fit into the destination area
- if (x < 0) {
- w -= x;
- off += x;
- x = 0;
- }
-
- if (y < 0) {
- h -= y;
- off += y * scansize;
- y = 0;
- }
-
- if (x + w > width) {
- w = width - x;
- }
-
- if (y + h > height) {
- h = height - y;
- }
-
- if (w <= 0 || h <= 0) {
- return;
- }
-
- // Check model
- if (this.cm == null) {
- setColorModel(model);
- } else if (model == null) {
- model = this.cm;
- } else if (!model.equals(this.cm)) {
- forceRGB();
- }
-
- boolean canArraycopy;
- // Process pixels
- switch (transferType) {
- case DataBuffer.TYPE_UNDEFINED: {
- if (isByteData) {
- transferType = DataBuffer.TYPE_BYTE;
- createRaster(transferType);
- // bData = new byte[width*height];
- canArraycopy = !forcedRGB;
- break;
- }
- transferType = DataBuffer.TYPE_INT;
- createRaster(transferType);
- // iData = new int[width*height];
- canArraycopy = !forcedRGB || model.equals(ColorModel.getRGBdefault());
- break;
- } // And proceed to copy the pixels
- case DataBuffer.TYPE_INT: {
- if (isByteData) { // There are int data already but the new data
- // are bytes
- forceRGB();
- canArraycopy = false;
- break;
- } else if (!forcedRGB || model.equals(ColorModel.getRGBdefault())) {
- canArraycopy = true;
- break;
- } // Else fallback to the RGB conversion
- }
- case DataBuffer.TYPE_BYTE: {
- if (isByteData && !forcedRGB) {
- canArraycopy = true;
- break;
- }
-
- // RGB conversion
- canArraycopy = false;
- break;
- }
- default: {
- throw new IllegalStateException(Messages.getString("awt.06")); //$NON-NLS-1$
- }
- }
-
- off += x;
- int maxOffset = off + h * scansize;
- int dstOffset = x + y * width;
-
- if (canArraycopy) {
- Object dstArray = isByteData ? (Object)bData : (Object)iData;
- for (; off < maxOffset; off += scansize, dstOffset += width) {
- System.arraycopy(pixels, off, dstArray, dstOffset, w);
- }
- } else {
- // RGB conversion
- for (; off < maxOffset; off += scansize, dstOffset += width) {
- int srcPos = off;
- int dstPos = dstOffset;
- int maxDstPos = dstOffset + w;
- for (; dstPos < maxDstPos; dstPos++, srcPos++) {
- iData[dstPos] = model.getRGB(isByteData ? ((byte[])pixels)[srcPos]
- : ((int[])pixels)[srcPos]);
- }
- }
- }
- }
-
- /**
- * Force rgb.
- */
- private void forceRGB() {
- if (!forcedRGB) {
- forcedRGB = true;
- int size = width * height;
- int rgbData[] = new int[size];
-
- if (bData != null) {
- for (int i = 0; i < size; i++) {
- rgbData[i] = cm.getRGB(bData[i]);
- }
- } else if (iData != null) {
- for (int i = 0; i < size; i++) {
- rgbData[i] = cm.getRGB(iData[i]);
- }
- }
-
- cm = ColorModel.getRGBdefault();
- DataBufferInt db = new DataBufferInt(rgbData, size);
- int masks[] = new int[] {
- 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000
- };
- raster = Raster.createPackedRaster(db, width, height, width, masks, null);
- iData = accessor.getDataInt(db);
- bData = null;
- transferType = DataBuffer.TYPE_INT;
- }
- }
-
- /**
- * Reset.
- */
- private void reset() {
- width = 0;
- height = 0;
- forcedRGB = false;
- cm = null;
- iData = null;
- bData = null;
- transferType = DataBuffer.TYPE_UNDEFINED;
- raster = null;
- }
-
- /**
- * Creates the raster.
- *
- * @param dataType
- * the data type.
- */
- private void createRaster(int dataType) {
- boolean createdValidBuffer = false;
- try {
- raster = cm.createCompatibleWritableRaster(width, height);
- int rasterType = raster.getDataBuffer().getDataType();
- if (rasterType == dataType) {
- switch (rasterType) {
- case DataBuffer.TYPE_INT: {
- iData = accessor.getDataInt(raster.getDataBuffer());
- if (iData != null) {
- createdValidBuffer = true;
- }
- break;
- }
- case DataBuffer.TYPE_BYTE: {
- bData = accessor.getDataByte(raster.getDataBuffer());
- if (bData != null) {
- createdValidBuffer = true;
- }
- break;
- }
- default:
- createdValidBuffer = false;
- }
-
- if (cm == ColorModel.getRGBdefault()) {
- forcedRGB = true;
- }
- } else {
- createdValidBuffer = false;
- }
- } catch (Exception e) {
- createdValidBuffer = false;
- }
-
- if (createdValidBuffer == false) {
- cm = ColorModel.getRGBdefault();
- raster = cm.createCompatibleWritableRaster(width, height);
- iData = accessor.getDataInt(raster.getDataBuffer());
- bData = null;
- forcedRGB = true;
- }
- }
-}