aboutsummaryrefslogtreecommitdiff
path: root/libjava/classpath/java/awt/image
diff options
context:
space:
mode:
authorAndrew Haley <aph@redhat.com>2016-09-30 16:24:48 +0000
committerAndrew Haley <aph@gcc.gnu.org>2016-09-30 16:24:48 +0000
commit07b78716af6a9d7c9fd1e94d9baf94a52c873947 (patch)
tree3f22b3241c513ad168c8353805614ae1249410f4 /libjava/classpath/java/awt/image
parenteae993948bae8b788c53772bcb9217c063716f93 (diff)
downloadgcc-07b78716af6a9d7c9fd1e94d9baf94a52c873947.zip
gcc-07b78716af6a9d7c9fd1e94d9baf94a52c873947.tar.gz
gcc-07b78716af6a9d7c9fd1e94d9baf94a52c873947.tar.bz2
Makefile.def: Remove libjava.
2016-09-30 Andrew Haley <aph@redhat.com> * Makefile.def: Remove libjava. * Makefile.tpl: Likewise. * Makefile.in: Regenerate. * configure.ac: Likewise. * configure: Likewise. * gcc/java: Remove. * libjava: Likewise. From-SVN: r240662
Diffstat (limited to 'libjava/classpath/java/awt/image')
-rw-r--r--libjava/classpath/java/awt/image/AffineTransformOp.java608
-rw-r--r--libjava/classpath/java/awt/image/AreaAveragingScaleFilter.java268
-rw-r--r--libjava/classpath/java/awt/image/BandCombineOp.java218
-rw-r--r--libjava/classpath/java/awt/image/BandedSampleModel.java759
-rw-r--r--libjava/classpath/java/awt/image/BufferStrategy.java124
-rw-r--r--libjava/classpath/java/awt/image/BufferedImage.java839
-rw-r--r--libjava/classpath/java/awt/image/BufferedImageFilter.java110
-rw-r--r--libjava/classpath/java/awt/image/BufferedImageOp.java107
-rw-r--r--libjava/classpath/java/awt/image/ByteLookupTable.java175
-rw-r--r--libjava/classpath/java/awt/image/ColorConvertOp.java537
-rw-r--r--libjava/classpath/java/awt/image/ColorModel.java794
-rw-r--r--libjava/classpath/java/awt/image/ComponentColorModel.java408
-rw-r--r--libjava/classpath/java/awt/image/ComponentSampleModel.java755
-rw-r--r--libjava/classpath/java/awt/image/ConvolveOp.java380
-rw-r--r--libjava/classpath/java/awt/image/CropImageFilter.java184
-rw-r--r--libjava/classpath/java/awt/image/DataBuffer.java437
-rw-r--r--libjava/classpath/java/awt/image/DataBufferByte.java245
-rw-r--r--libjava/classpath/java/awt/image/DataBufferDouble.java288
-rw-r--r--libjava/classpath/java/awt/image/DataBufferFloat.java286
-rw-r--r--libjava/classpath/java/awt/image/DataBufferInt.java244
-rw-r--r--libjava/classpath/java/awt/image/DataBufferShort.java245
-rw-r--r--libjava/classpath/java/awt/image/DataBufferUShort.java246
-rw-r--r--libjava/classpath/java/awt/image/DirectColorModel.java435
-rw-r--r--libjava/classpath/java/awt/image/FilteredImageSource.java124
-rw-r--r--libjava/classpath/java/awt/image/ImageConsumer.java216
-rw-r--r--libjava/classpath/java/awt/image/ImageFilter.java226
-rw-r--r--libjava/classpath/java/awt/image/ImageObserver.java129
-rw-r--r--libjava/classpath/java/awt/image/ImageProducer.java84
-rw-r--r--libjava/classpath/java/awt/image/ImagingOpException.java66
-rw-r--r--libjava/classpath/java/awt/image/IndexColorModel.java736
-rw-r--r--libjava/classpath/java/awt/image/Kernel.java171
-rw-r--r--libjava/classpath/java/awt/image/LookupOp.java307
-rw-r--r--libjava/classpath/java/awt/image/LookupTable.java109
-rw-r--r--libjava/classpath/java/awt/image/MemoryImageSource.java429
-rw-r--r--libjava/classpath/java/awt/image/MultiPixelPackedSampleModel.java603
-rw-r--r--libjava/classpath/java/awt/image/PackedColorModel.java188
-rw-r--r--libjava/classpath/java/awt/image/PixelGrabber.java631
-rw-r--r--libjava/classpath/java/awt/image/PixelInterleavedSampleModel.java123
-rw-r--r--libjava/classpath/java/awt/image/RGBImageFilter.java265
-rw-r--r--libjava/classpath/java/awt/image/Raster.java973
-rw-r--r--libjava/classpath/java/awt/image/RasterFormatException.java65
-rw-r--r--libjava/classpath/java/awt/image/RasterOp.java104
-rw-r--r--libjava/classpath/java/awt/image/RenderedImage.java70
-rw-r--r--libjava/classpath/java/awt/image/ReplicateScaleFilter.java257
-rw-r--r--libjava/classpath/java/awt/image/RescaleOp.java385
-rw-r--r--libjava/classpath/java/awt/image/SampleModel.java974
-rw-r--r--libjava/classpath/java/awt/image/ShortLookupTable.java177
-rw-r--r--libjava/classpath/java/awt/image/SinglePixelPackedSampleModel.java586
-rw-r--r--libjava/classpath/java/awt/image/TileObserver.java47
-rw-r--r--libjava/classpath/java/awt/image/VolatileImage.java253
-rw-r--r--libjava/classpath/java/awt/image/WritableRaster.java448
-rw-r--r--libjava/classpath/java/awt/image/WritableRenderedImage.java56
-rw-r--r--libjava/classpath/java/awt/image/package.html46
-rw-r--r--libjava/classpath/java/awt/image/renderable/ContextualRenderedImageFactory.java56
-rw-r--r--libjava/classpath/java/awt/image/renderable/ParameterBlock.java308
-rw-r--r--libjava/classpath/java/awt/image/renderable/RenderContext.java141
-rw-r--r--libjava/classpath/java/awt/image/renderable/RenderableImage.java61
-rw-r--r--libjava/classpath/java/awt/image/renderable/RenderableImageOp.java157
-rw-r--r--libjava/classpath/java/awt/image/renderable/RenderableImageProducer.java166
-rw-r--r--libjava/classpath/java/awt/image/renderable/RenderedImageFactory.java47
-rw-r--r--libjava/classpath/java/awt/image/renderable/package.html46
61 files changed, 0 insertions, 18522 deletions
diff --git a/libjava/classpath/java/awt/image/AffineTransformOp.java b/libjava/classpath/java/awt/image/AffineTransformOp.java
deleted file mode 100644
index 460804f9..0000000
--- a/libjava/classpath/java/awt/image/AffineTransformOp.java
+++ /dev/null
@@ -1,608 +0,0 @@
-/* AffineTransformOp.java -- This class performs affine
- transformation between two images or rasters in 2 dimensions.
- Copyright (C) 2004, 2006 Free Software Foundation
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package java.awt.image;
-
-import java.awt.Graphics2D;
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.RenderingHints;
-import java.awt.geom.AffineTransform;
-import java.awt.geom.NoninvertibleTransformException;
-import java.awt.geom.Point2D;
-import java.awt.geom.Rectangle2D;
-import java.util.Arrays;
-
-/**
- * AffineTransformOp performs matrix-based transformations (translations,
- * scales, flips, rotations, and shears).
- *
- * If interpolation is required, nearest neighbour, bilinear, and bicubic
- * methods are available.
- *
- * @author Olga Rodimina (rodimina@redhat.com)
- * @author Francis Kung (fkung@redhat.com)
- */
-public class AffineTransformOp implements BufferedImageOp, RasterOp
-{
- public static final int TYPE_NEAREST_NEIGHBOR = 1;
-
- public static final int TYPE_BILINEAR = 2;
-
- /**
- * @since 1.5.0
- */
- public static final int TYPE_BICUBIC = 3;
-
- private AffineTransform transform;
- private RenderingHints hints;
-
- /**
- * Construct AffineTransformOp with the given xform and interpolationType.
- * Interpolation type can be TYPE_BILINEAR, TYPE_BICUBIC or
- * TYPE_NEAREST_NEIGHBOR.
- *
- * @param xform AffineTransform that will applied to the source image
- * @param interpolationType type of interpolation used
- * @throws ImagingOpException if the transform matrix is noninvertible
- */
- public AffineTransformOp (AffineTransform xform, int interpolationType)
- {
- this.transform = xform;
- if (xform.getDeterminant() == 0)
- throw new ImagingOpException(null);
-
- switch (interpolationType)
- {
- case TYPE_BILINEAR:
- hints = new RenderingHints (RenderingHints.KEY_INTERPOLATION,
- RenderingHints.VALUE_INTERPOLATION_BILINEAR);
- break;
- case TYPE_BICUBIC:
- hints = new RenderingHints (RenderingHints.KEY_INTERPOLATION,
- RenderingHints.VALUE_INTERPOLATION_BICUBIC);
- break;
- default:
- hints = new RenderingHints (RenderingHints.KEY_INTERPOLATION,
- RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
- }
- }
-
- /**
- * Construct AffineTransformOp with the given xform and rendering hints.
- *
- * @param xform AffineTransform that will applied to the source image
- * @param hints rendering hints that will be used during transformation
- * @throws ImagingOpException if the transform matrix is noninvertible
- */
- public AffineTransformOp (AffineTransform xform, RenderingHints hints)
- {
- this.transform = xform;
- this.hints = hints;
- if (xform.getDeterminant() == 0)
- throw new ImagingOpException(null);
- }
-
- /**
- * Creates a new BufferedImage with the size equal to that of the
- * transformed image and the correct number of bands. The newly created
- * image is created with the specified ColorModel.
- * If a ColorModel is not specified, an appropriate ColorModel is used.
- *
- * @param src the source image.
- * @param destCM color model for the destination image (can be null).
- * @return a new compatible destination image.
- */
- public BufferedImage createCompatibleDestImage (BufferedImage src,
- ColorModel destCM)
- {
- if (destCM != null)
- return new BufferedImage(destCM,
- createCompatibleDestRaster(src.getRaster()),
- src.isAlphaPremultiplied(), null);
-
- // This behaviour was determined by Mauve testcases, and is compatible
- // with the reference implementation
- if (src.getType() == BufferedImage.TYPE_INT_ARGB_PRE
- || src.getType() == BufferedImage.TYPE_4BYTE_ABGR
- || src.getType() == BufferedImage.TYPE_4BYTE_ABGR_PRE)
- return new BufferedImage(src.getWidth(), src.getHeight(), src.getType());
-
- else
- return new BufferedImage(src.getWidth(), src.getHeight(),
- BufferedImage.TYPE_INT_ARGB);
- }
-
- /**
- * Creates a new WritableRaster with the size equal to the transformed
- * source raster and correct number of bands .
- *
- * @param src the source raster.
- * @throws RasterFormatException if resulting width or height of raster is 0.
- * @return a new compatible raster.
- */
- public WritableRaster createCompatibleDestRaster (Raster src)
- {
- Rectangle2D rect = getBounds2D(src);
-
- if (rect.getWidth() == 0 || rect.getHeight() == 0)
- throw new RasterFormatException("width or height is 0");
-
- return src.createCompatibleWritableRaster((int) rect.getWidth(),
- (int) rect.getHeight());
- }
-
- /**
- * Transforms source image using transform specified at the constructor.
- * The resulting transformed image is stored in the destination image if one
- * is provided; otherwise a new BufferedImage is created and returned.
- *
- * @param src source image
- * @param dst destination image
- * @throws IllegalArgumentException if the source and destination image are
- * the same
- * @return transformed source image.
- */
- public final BufferedImage filter (BufferedImage src, BufferedImage dst)
- {
- if (dst == src)
- throw new IllegalArgumentException("src image cannot be the same as "
- + "the dst image");
-
- // If the destination image is null, then use a compatible BufferedImage
- if (dst == null)
- dst = createCompatibleDestImage(src, null);
-
- Graphics2D gr = dst.createGraphics();
- gr.setRenderingHints(hints);
- gr.drawImage(src, transform, null);
- return dst;
- }
-
- /**
- * Transforms source raster using transform specified at the constructor.
- * The resulting raster is stored in the destination raster if it is not
- * null, otherwise a new raster is created and returned.
- *
- * @param src source raster
- * @param dst destination raster
- * @throws IllegalArgumentException if the source and destination are not
- * compatible
- * @return transformed raster.
- */
- public final WritableRaster filter(Raster src, WritableRaster dst)
- {
- // Initial checks
- if (dst == src)
- throw new IllegalArgumentException("src image cannot be the same as"
- + " the dst image");
-
- if (dst == null)
- dst = createCompatibleDestRaster(src);
-
- if (src.getNumBands() != dst.getNumBands())
- throw new IllegalArgumentException("src and dst must have same number"
- + " of bands");
-
- // Optimization for rasters that can be represented in the RGB colormodel:
- // wrap the rasters in images, and let Cairo do the transformation
- if (ColorModel.getRGBdefault().isCompatibleSampleModel(src.getSampleModel())
- && ColorModel.getRGBdefault().isCompatibleSampleModel(dst.getSampleModel()))
- {
- WritableRaster src2 = Raster.createWritableRaster(src.getSampleModel(),
- src.getDataBuffer(),
- new Point(src.getMinX(),
- src.getMinY()));
- BufferedImage iSrc = new BufferedImage(ColorModel.getRGBdefault(),
- src2, false, null);
- BufferedImage iDst = new BufferedImage(ColorModel.getRGBdefault(), dst,
- false, null);
-
- return filter(iSrc, iDst).getRaster();
- }
-
- // Otherwise, we need to do the transformation in java code...
- // Create arrays to hold all the points
- double[] dstPts = new double[dst.getHeight() * dst.getWidth() * 2];
- double[] srcPts = new double[dst.getHeight() * dst.getWidth() * 2];
-
- // Populate array with all points in the *destination* raster
- int i = 0;
- for (int x = 0; x < dst.getWidth(); x++)
- {
- for (int y = 0; y < dst.getHeight(); y++)
- {
- dstPts[i++] = x;
- dstPts[i++] = y;
- }
- }
- Rectangle srcbounds = src.getBounds();
-
- // Use an inverse transform to map each point in the destination to
- // a point in the source. Note that, while all points in the destination
- // matrix are integers, this is not necessarily true for points in the
- // source (hence why interpolation is required)
- try
- {
- AffineTransform inverseTx = transform.createInverse();
- inverseTx.transform(dstPts, 0, srcPts, 0, dstPts.length / 2);
- }
- catch (NoninvertibleTransformException e)
- {
- // Shouldn't happen since the constructor traps this
- throw new ImagingOpException(e.getMessage());
- }
-
- // Different interpolation methods...
- if (hints.containsValue(RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR))
- filterNearest(src, dst, dstPts, srcPts);
-
- else if (hints.containsValue(RenderingHints.VALUE_INTERPOLATION_BILINEAR))
- filterBilinear(src, dst, dstPts, srcPts);
-
- else // bicubic
- filterBicubic(src, dst, dstPts, srcPts);
-
- return dst;
- }
-
- /**
- * Transforms source image using transform specified at the constructor and
- * returns bounds of the transformed image.
- *
- * @param src image to be transformed
- * @return bounds of the transformed image.
- */
- public final Rectangle2D getBounds2D (BufferedImage src)
- {
- return getBounds2D (src.getRaster());
- }
-
- /**
- * Returns bounds of the transformed raster.
- *
- * @param src raster to be transformed
- * @return bounds of the transformed raster.
- */
- public final Rectangle2D getBounds2D (Raster src)
- {
- return transform.createTransformedShape(src.getBounds()).getBounds2D();
- }
-
- /**
- * Returns interpolation type used during transformations.
- *
- * @return interpolation type
- */
- public final int getInterpolationType ()
- {
- if (hints.containsValue(RenderingHints.VALUE_INTERPOLATION_BILINEAR))
- return TYPE_BILINEAR;
-
- else if (hints.containsValue(RenderingHints.VALUE_INTERPOLATION_BICUBIC))
- return TYPE_BICUBIC;
-
- else
- return TYPE_NEAREST_NEIGHBOR;
- }
-
- /**
- * Returns location of the transformed source point. The resulting point
- * is stored in the dstPt if one is specified.
- *
- * @param srcPt point to be transformed
- * @param dstPt destination point
- * @return the location of the transformed source point.
- */
- public final Point2D getPoint2D (Point2D srcPt, Point2D dstPt)
- {
- return transform.transform (srcPt, dstPt);
- }
-
- /**
- * Returns rendering hints that are used during transformation.
- *
- * @return the rendering hints used in this Op.
- */
- public final RenderingHints getRenderingHints ()
- {
- return hints;
- }
-
- /**
- * Returns transform used in transformation between source and destination
- * image.
- *
- * @return the transform used in this Op.
- */
- public final AffineTransform getTransform ()
- {
- return transform;
- }
-
- /**
- * Perform nearest-neighbour filtering
- *
- * @param src the source raster
- * @param dst the destination raster
- * @param dpts array of points on the destination raster
- * @param pts array of corresponding points on the source raster
- */
- private void filterNearest(Raster src, WritableRaster dst, double[] dpts,
- double[] pts)
- {
- Rectangle srcbounds = src.getBounds();
-
- // For all points on the destination raster, copy the value from the
- // corrosponding (rounded) source point
- for (int i = 0; i < dpts.length; i += 2)
- {
- int srcX = (int) Math.round(pts[i]) + src.getMinX();
- int srcY = (int) Math.round(pts[i + 1]) + src.getMinY();
-
- if (srcbounds.contains(srcX, srcY))
- dst.setDataElements((int) dpts[i] + dst.getMinX(),
- (int) dpts[i + 1] + dst.getMinY(),
- src.getDataElements(srcX, srcY, null));
- }
- }
-
- /**
- * Perform bilinear filtering
- *
- * @param src the source raster
- * @param dst the destination raster
- * @param dpts array of points on the destination raster
- * @param pts array of corresponding points on the source raster
- */
- private void filterBilinear(Raster src, WritableRaster dst, double[] dpts,
- double[] pts)
- {
- Rectangle srcbounds = src.getBounds();
-
- Object xyarr = null;
- Object xp1arr = null;
- Object yp1arr = null;
- Object xyp1arr = null;
-
- double xy;
- double xp1;
- double yp1;
- double xyp1;
-
- double[] result = new double[src.getNumBands()];
-
- // For all points in the destination raster, use bilinear interpolation
- // to find the value from the corrosponding source points
- for (int i = 0; i < dpts.length; i += 2)
- {
- int srcX = (int) Math.round(pts[i]) + src.getMinX();
- int srcY = (int) Math.round(pts[i + 1]) + src.getMinY();
-
- if (srcbounds.contains(srcX, srcY))
- {
- // Corner case at the bottom or right edge; use nearest neighbour
- if (pts[i] >= src.getWidth() - 1
- || pts[i + 1] >= src.getHeight() - 1)
- dst.setDataElements((int) dpts[i] + dst.getMinX(),
- (int) dpts[i + 1] + dst.getMinY(),
- src.getDataElements(srcX, srcY, null));
-
- // Standard case, apply the bilinear formula
- else
- {
- int x = (int) Math.floor(pts[i] + src.getMinX());
- int y = (int) Math.floor(pts[i + 1] + src.getMinY());
- double xdiff = pts[i] + src.getMinX() - x;
- double ydiff = pts[i + 1] + src.getMinY() - y;
-
- // Get surrounding pixels used in interpolation... optimized
- // to use the smallest datatype possible.
- if (src.getTransferType() == DataBuffer.TYPE_DOUBLE
- || src.getTransferType() == DataBuffer.TYPE_FLOAT)
- {
- xyarr = src.getPixel(x, y, (double[])xyarr);
- xp1arr = src.getPixel(x+1, y, (double[])xp1arr);
- yp1arr = src.getPixel(x, y+1, (double[])yp1arr);
- xyp1arr = src.getPixel(x+1, y+1, (double[])xyp1arr);
- }
- else
- {
- xyarr = src.getPixel(x, y, (int[])xyarr);
- xp1arr = src.getPixel(x+1, y, (int[])xp1arr);
- yp1arr = src.getPixel(x, y+1, (int[])yp1arr);
- xyp1arr = src.getPixel(x+1, y+1, (int[])xyp1arr);
- }
- // using
- // array[] pixels = src.getPixels(x, y, 2, 2, pixels);
- // instead of doing four individual src.getPixel() calls
- // should be faster, but benchmarking shows that it's not...
-
- // Run interpolation for each band
- for (int j = 0; j < src.getNumBands(); j++)
- {
- // Pull individual sample values out of array
- if (src.getTransferType() == DataBuffer.TYPE_DOUBLE
- || src.getTransferType() == DataBuffer.TYPE_FLOAT)
- {
- xy = ((double[])xyarr)[j];
- xp1 = ((double[])xp1arr)[j];
- yp1 = ((double[])yp1arr)[j];
- xyp1 = ((double[])xyp1arr)[j];
- }
- else
- {
- xy = ((int[])xyarr)[j];
- xp1 = ((int[])xp1arr)[j];
- yp1 = ((int[])yp1arr)[j];
- xyp1 = ((int[])xyp1arr)[j];
- }
-
- // If all four samples are identical, there's no need to
- // calculate anything
- if (xy == xp1 && xy == yp1 && xy == xyp1)
- result[j] = xy;
-
- // Run bilinear interpolation formula
- else
- result[j] = (xy * (1-xdiff) + xp1 * xdiff)
- * (1-ydiff)
- + (yp1 * (1-xdiff) + xyp1 * xdiff)
- * ydiff;
- }
-
- dst.setPixel((int)dpts[i] + dst.getMinX(),
- (int)dpts[i+1] + dst.getMinY(),
- result);
- }
- }
- }
- }
-
- /**
- * Perform bicubic filtering
- * based on http://local.wasp.uwa.edu.au/~pbourke/colour/bicubic/
- *
- * @param src the source raster
- * @param dst the destination raster
- * @param dpts array of points on the destination raster
- * @param pts array of corresponding points on the source raster
- */
- private void filterBicubic(Raster src, WritableRaster dst, double[] dpts,
- double[] pts)
- {
- Rectangle srcbounds = src.getBounds();
- double[] result = new double[src.getNumBands()];
- Object pixels = null;
-
- // For all points on the destination raster, perform bicubic interpolation
- // from corrosponding source points
- for (int i = 0; i < dpts.length; i += 2)
- {
- if (srcbounds.contains((int) Math.round(pts[i]) + src.getMinX(),
- (int) Math.round(pts[i + 1]) + src.getMinY()))
- {
- int x = (int) Math.floor(pts[i] + src.getMinX());
- int y = (int) Math.floor(pts[i + 1] + src.getMinY());
- double dx = pts[i] + src.getMinX() - x;
- double dy = pts[i + 1] + src.getMinY() - y;
- Arrays.fill(result, 0);
-
- for (int m = - 1; m < 3; m++)
- for (int n = - 1; n < 3; n++)
- {
- // R(x) = ( P(x+2)^3 - 4 P(x+1)^3 + 6 P(x)^3 - 4 P(x-1)^3 ) / 6
- double r1 = 0;
- double r2 = 0;
-
- // Calculate R(m - dx)
- double rx = m - dx + 2;
- r1 += rx * rx * rx;
-
- rx = m - dx + 1;
- if (rx > 0)
- r1 -= 4 * rx * rx * rx;
-
- rx = m - dx;
- if (rx > 0)
- r1 += 6 * rx * rx * rx;
-
- rx = m - dx - 1;
- if (rx > 0)
- r1 -= 4 * rx * rx * rx;
-
- r1 /= 6;
-
- // Calculate R(dy - n);
- rx = dy - n + 2;
- if (rx > 0)
- r2 += rx * rx * rx;
-
- rx = dy - n + 1;
- if (rx > 0)
- r2 -= 4 * rx * rx * rx;
-
- rx = dy - n;
- if (rx > 0)
- r2 += 6 * rx * rx * rx;
-
- rx = dy - n - 1;
- if (rx > 0)
- r2 -= 4 * rx * rx * rx;
-
- r2 /= 6;
-
- // Calculate F(i+m, j+n) R(m - dx) R(dy - n)
- // Check corner cases
- int srcX = x + m;
- if (srcX >= src.getMinX() + src.getWidth())
- srcX = src.getMinX() + src.getWidth() - 1;
- else if (srcX < src.getMinX())
- srcX = src.getMinX();
-
- int srcY = y + n;
- if (srcY >= src.getMinY() + src.getHeight())
- srcY = src.getMinY() + src.getHeight() - 1;
- else if (srcY < src.getMinY())
- srcY = src.getMinY();
-
- // Calculate once for each band, using the smallest
- // datatype possible
- if (src.getTransferType() == DataBuffer.TYPE_DOUBLE
- || src.getTransferType() == DataBuffer.TYPE_FLOAT)
- {
- pixels = src.getPixel(srcX, srcY, (double[])pixels);
- for (int j = 0; j < result.length; j++)
- result[j] += ((double[])pixels)[j] * r1 * r2;
- }
- else
- {
- pixels = src.getPixel(srcX, srcY, (int[])pixels);
- for (int j = 0; j < result.length; j++)
- result[j] += ((int[])pixels)[j] * r1 * r2;
- }
- }
-
- // Put it all together
- dst.setPixel((int)dpts[i] + dst.getMinX(),
- (int)dpts[i+1] + dst.getMinY(),
- result);
- }
- }
- }
-}
diff --git a/libjava/classpath/java/awt/image/AreaAveragingScaleFilter.java b/libjava/classpath/java/awt/image/AreaAveragingScaleFilter.java
deleted file mode 100644
index db2335f1..0000000
--- a/libjava/classpath/java/awt/image/AreaAveragingScaleFilter.java
+++ /dev/null
@@ -1,268 +0,0 @@
-/* AreaAveragingScaleFilter.java -- Java class for filtering images
- Copyright (C) 1999,2006 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-/**
- * This filter should produce images which do not have image artifacts
- * like broken lines which were originally unbroken. The cost is of
- * course speed. Using bi-linear interpolation here against 4 pixel
- * points should give the desired results although Sun does not
- * specify what the exact algorithm should be.
- * <br>
- *
- * @author C. Brian Jones (cbj@gnu.org)
- */
-public class AreaAveragingScaleFilter extends ReplicateScaleFilter
-{
- /**
- * Construct an instance of <code>AreaAveragingScaleFilter</code> which
- * should be used in conjunction with a <code>FilteredImageSource</code>
- * object.
- *
- * @param width the width of the destination image
- * @param height the height of the destination image
- */
- public AreaAveragingScaleFilter(int width, int height) {
- super(width, height);
- }
-
- /**
- * The <code>ImageProducer</code> should call this method with a
- * bit mask of hints from any of <code>RANDOMPIXELORDER</code>,
- * <code>TOPDOWNLEFTRIGHT</code>, <code>COMPLETESCANLINES</code>,
- * <code>SINGLEPASS</code>, <code>SINGLEFRAME</code> from the
- * <code>ImageConsumer</code> interface.
- * <br>
- * FIXME - more than likely Sun's implementation desires
- * <code>TOPDOWNLEFTRIGHT</code> order and this method is overloaded here
- * in order to assure that mask is part of the hints added to
- * the consumer.
- *
- * @param flags a bit mask of hints
- * @see ImageConsumer
- */
- public void setHints(int flags)
- {
- if (consumer != null)
- consumer.setHints(flags);
- }
-
- /**
- * This function delivers a rectangle of pixels where any
- * pixel(m,n) is stored in the array as a <code>byte</code> at
- * index (n * scansize + m + offset).
- *
- * @param x the x coordinate of the rectangle
- * @param y the y coordinate of the rectangle
- * @param w the width of the rectangle
- * @param h the height of the rectangle
- * @param model the <code>ColorModel</code> used to translate the pixels
- * @param pixels the array of pixel values
- * @param offset the index of the first pixels in the <code>pixels</code> array
- * @param scansize the width to use in extracting pixels from the <code>pixels</code> array
- */
- public void setPixels(int x, int y, int w, int h,
- ColorModel model, byte[] pixels, int offset, int scansize)
- {
- double rx = ((double) srcWidth) / destWidth;
- double ry = ((double) srcHeight) / destHeight;
-
- int destScansize = (int) Math.round(scansize / rx);
-
- byte[] destPixels = averagePixels(x, y, w, h,
- model, pixels, offset, scansize,
- rx, ry, destScansize);
-
- if (consumer != null)
- consumer.setPixels((int) Math.floor(x/rx), (int) Math.floor(y/ry),
- (int) Math.ceil(w/rx), (int) Math.ceil(h/ry),
- model, destPixels, 0, destScansize);
- }
-
- /**
- * This function delivers a rectangle of pixels where any
- * pixel(m,n) is stored in the array as an <code>int</code> at
- * index (n * scansize + m + offset).
- *
- * @param x the x coordinate of the rectangle
- * @param y the y coordinate of the rectangle
- * @param w the width of the rectangle
- * @param h the height of the rectangle
- * @param model the <code>ColorModel</code> used to translate the pixels
- * @param pixels the array of pixel values
- * @param offset the index of the first pixels in the <code>pixels</code> array
- * @param scansize the width to use in extracting pixels from the <code>pixels</code> array
- */
- public void setPixels(int x, int y, int w, int h,
- ColorModel model, int[] pixels, int offset, int scansize)
- {
- double rx = ((double) srcWidth) / destWidth;
- double ry = ((double) srcHeight) / destHeight;
-
- int destScansize = (int) Math.round(scansize / rx);
-
- int[] destPixels = averagePixels(x, y, w, h,
- model, pixels, offset, scansize,
- rx, ry, destScansize);
-
- if (consumer != null)
- consumer.setPixels((int) Math.floor(x/rx), (int) Math.floor(y/ry),
- (int) Math.ceil(w/rx), (int) Math.ceil(h/ry),
- model, destPixels, 0, destScansize);
- }
-
- /**
- * This is a really terrible implementation,
- * since it uses the nearest-neighbor method. This filter is rarely used though.
- *
- * @param srcx, srcy - Source rectangle upper-left corner
- * @param srcw, srch - Source rectangle width and height
- * @param model - Pixel color model
- * @param srcPixels - Source pixel data.
- * @param srcOffset - Starting offset into the source pixel data array.
- * @param srcScansize - Source array scanline size.
- * @param rx,ry - Scaling factor.
- * @param destScansize - Destination array scanline size.
- */
- private byte[] averagePixels(int srcx, int srcy, int srcw, int srch,
- ColorModel model, byte[] srcPixels,
- int srcOffset, int srcScansize,
- double rx, double ry, int destScansize)
- {
- int destW = (int) Math.ceil(srcw/rx);
- int destH = (int) Math.ceil(srch/ry);
- byte[] destPixels = new byte[ destW * destH ];
- int sx, sy;
-
- int w = (int)Math.ceil(rx);
- int h = (int)Math.ceil(ry);
-
- for(int x = 0; x < destW; x++)
- for(int y = 0; y < destH; y++)
- {
- sx = (int) (x * rx);
- sy = (int) (y * ry);
-
- int r,g,b,a;
- r = g = b = a = 0;
-
- for(int i = 0; i < w; i++)
- {
- for(int j = 0; j < h; j++)
- {
- int idx = srcx + sx + i + (srcy + sy + j)*srcScansize;
- r += model.getRed(srcPixels[ idx ]);
- g += model.getGreen(srcPixels[ idx ]);
- b += model.getBlue(srcPixels[ idx ]);
- a += model.getAlpha(srcPixels[ idx ]);
- }
- }
-
- r = r / (w * h);
- g = g / (w * h);
- b = b / (w * h);
- a = a / (w * h);
-
- // Does this really work?
- destPixels[x + destScansize*y] = (byte)model.getDataElement
- (new int[]{r, g, b, a}, 0);
- }
-
- return destPixels;
- }
-
- /**
- * This is a really terrible implementation,
- * since it uses the nearest-neighbor method. This filter is rarely used though.
- *
- * @param srcx, srcy - Source rectangle upper-left corner
- * @param srcw, srch - Source rectangle width and height
- * @param model - Pixel color model
- * @param srcPixels - Source pixel data.
- * @param srcOffset - Starting offset into the source pixel data array.
- * @param srcScansize - Source array scanline size.
- * @param rx,ry - Scaling factor.
- * @param destScansize - Destination array scanline size.
- */
- private int[] averagePixels(int srcx, int srcy, int srcw, int srch,
- ColorModel model, int[] srcPixels,
- int srcOffset, int srcScansize,
- double rx, double ry, int destScansize)
- {
- int destW = (int) Math.ceil(srcw/rx);
- int destH = (int) Math.ceil(srch/ry);
- int[] destPixels = new int[ destW * destH ];
- int sx, sy;
-
- int w = (int)Math.ceil(rx);
- int h = (int)Math.ceil(ry);
-
- for(int x = 0; x < destW; x++)
- for(int y = 0; y < destH; y++)
- {
- sx = (int) (x * rx);
- sy = (int) (y * ry);
-
- int r,g,b,a;
- r = g = b = a = 0;
-
- for(int i = 0; i < w; i++)
- {
- for(int j = 0; j < h; j++)
- {
- int idx = srcx + sx + i + (srcy + sy + j)*srcScansize;
- r += model.getRed(srcPixels[ idx ]);
- g += model.getGreen(srcPixels[ idx ]);
- b += model.getBlue(srcPixels[ idx ]);
- a += model.getAlpha(srcPixels[ idx ]);
- }
- }
-
- r = r / (w * h);
- g = g / (w * h);
- b = b / (w * h);
- a = a / (w * h);
-
- destPixels[x + destScansize*y] = model.getDataElement
- (new int[]{r, g, b, a}, 0);
- }
-
- return destPixels;
- }
-}
diff --git a/libjava/classpath/java/awt/image/BandCombineOp.java b/libjava/classpath/java/awt/image/BandCombineOp.java
deleted file mode 100644
index f3a6c57..0000000
--- a/libjava/classpath/java/awt/image/BandCombineOp.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/* BandCombineOp.java - perform a combination on the bands of a raster
- Copyright (C) 2004, 2006 Free Software Foundation
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package java.awt.image;
-
-import java.awt.RenderingHints;
-import java.awt.geom.Point2D;
-import java.awt.geom.Rectangle2D;
-import java.util.Arrays;
-
-/**
- * Filter Raster pixels by applying a matrix.
- *
- * BandCombineOp applies a matrix to each pixel to produce new pixel values.
- * The width of the matrix must be the same or one more than the number of
- * bands in the source Raster. If one more, the pixels in the source are
- * assumed to contain an implicit 1.0 at the end.
- *
- * The rows of the matrix are multiplied by the pixel to produce the values
- * for the destination. Therefore the destination Raster must contain the
- * same number of bands as the number of rows in the filter matrix.
- *
- * This Op assumes that samples are integers; floating point sample types will
- * be rounded to their nearest integer value during filtering.
- *
- * @author Jerry Quinn (jlquinn@optonline.net)
- */
-public class BandCombineOp implements RasterOp
-{
- private RenderingHints hints;
- private float[][] matrix;
-
- /**
- * Construct a BandCombineOp.
- *
- * @param matrix The matrix to filter pixels with.
- * @param hints Rendering hints to apply. Ignored.
- * @throws ArrayIndexOutOfBoundsException if the matrix is invalid
- */
- public BandCombineOp(float[][] matrix, RenderingHints hints)
- {
- this.matrix = new float[matrix.length][];
- int width = matrix[0].length;
- for (int i = 0; i < matrix.length; i++)
- {
- this.matrix[i] = new float[width + 1];
- for (int j = 0; j < width; j++)
- this.matrix[i][j] = matrix[i][j];
-
- // The reference implementation pads the array with a trailing zero...
- this.matrix[i][width] = 0;
- }
-
- this.hints = hints;
- }
-
- /**
- * Filter Raster pixels through a matrix. Applies the Op matrix to source
- * pixes to produce dest pixels. Each row of the matrix is multiplied by the
- * src pixel components to produce the dest pixel. If matrix is one more than
- * the number of bands in the src, the last element is implicitly multiplied
- * by 1, i.e. added to the sum for that dest component. If dest is null, a
- * suitable Raster is created. This implementation uses
- * createCompatibleDestRaster.
- *
- * @param src The source Raster.
- * @param dest The destination Raster, or null.
- * @throws IllegalArgumentException if the destination raster is incompatible
- * with the source raster.
- * @return The filtered Raster.
- * @see java.awt.image.RasterOp#filter(java.awt.image.Raster,
- * java.awt.image.WritableRaster)
- */
- public WritableRaster filter(Raster src, WritableRaster dest) {
- if (dest == null)
- dest = createCompatibleDestRaster(src);
- else if (dest.getNumBands() != src.getNumBands()
- || dest.getTransferType() != src.getTransferType())
- throw new IllegalArgumentException("Destination raster is incompatible with source raster");
-
- // Filter the pixels
- int[] spix = new int[matrix[0].length - 1];
- int[] spix2 = new int[matrix[0].length - 1];
- int[] dpix = new int[matrix.length];
- for (int y = src.getMinY(); y < src.getHeight() + src.getMinY(); y++)
- for (int x = src.getMinX(); x < src.getWidth() + src.getMinX(); x++)
- {
- // In case matrix rows have implicit translation
- spix[spix.length - 1] = 1;
- src.getPixel(x, y, spix);
-
- // Do not re-calculate if pixel is identical to the last one
- // (ie, blocks of the same colour)
- if (!Arrays.equals(spix, spix2))
- {
- System.arraycopy(spix, 0, spix2, 0, spix.length);
- for (int i = 0; i < matrix.length; i++)
- {
- dpix[i] = 0;
- for (int j = 0; j < matrix[0].length - 1; j++)
- dpix[i] += spix[j] * (int)matrix[i][j];
- }
- }
- dest.setPixel(x, y, dpix);
- }
-
- return dest;
- }
-
- /* (non-Javadoc)
- * @see java.awt.image.RasterOp#getBounds2D(java.awt.image.Raster)
- */
- public final Rectangle2D getBounds2D(Raster src)
- {
- return src.getBounds();
- }
-
- /**
- * Creates a new WritableRaster that can be used as the destination for this
- * Op. The number of bands in the source raster must equal the number of rows
- * in the op matrix, which must also be equal to either the number of columns
- * or (columns - 1) in the matrix.
- *
- * @param src The source raster.
- * @return A compatible raster.
- * @see java.awt.image.RasterOp#createCompatibleDestRaster(java.awt.image.Raster)
- * @throws IllegalArgumentException if the raster is incompatible with the
- * matrix.
- */
- public WritableRaster createCompatibleDestRaster(Raster src)
- {
- // Destination raster must have same number of bands as source
- if (src.getNumBands() != matrix.length)
- throw new IllegalArgumentException("Number of rows in matrix specifies an "
- + "incompatible number of bands");
-
- // We use -1 and -2 because we previously padded the rows with a trailing 0
- if (src.getNumBands() != matrix[0].length - 1
- && src.getNumBands() != matrix[0].length - 2)
- throw new IllegalArgumentException("Incompatible number of bands: "
- + "the number of bands in the raster must equal the number of "
- + "columns in the matrix, optionally minus one");
-
- return src.createCompatibleWritableRaster();
- }
-
- /**
- * Return corresponding destination point for source point. Because this is
- * not a geometric operation, it simply returns a copy of the source.
- *
- * @param src The source point.
- * @param dst The destination point.
- * @return dst The destination point.
- * @see java.awt.image.RasterOp#getPoint2D(java.awt.geom.Point2D,
- *java.awt.geom.Point2D)
- */
- public final Point2D getPoint2D(Point2D src, Point2D dst)
- {
- if (dst == null)
- return (Point2D)src.clone();
-
- dst.setLocation(src);
- return dst;
- }
-
- /* (non-Javadoc)
- * @see java.awt.image.RasterOp#getRenderingHints()
- */
- public final RenderingHints getRenderingHints()
- {
- return hints;
- }
-
- /**
- * Return the matrix used in this operation.
- *
- * @return The matrix used in this operation.
- */
- public final float[][] getMatrix()
- {
- return matrix;
- }
-
-}
diff --git a/libjava/classpath/java/awt/image/BandedSampleModel.java b/libjava/classpath/java/awt/image/BandedSampleModel.java
deleted file mode 100644
index 7df6c85..0000000
--- a/libjava/classpath/java/awt/image/BandedSampleModel.java
+++ /dev/null
@@ -1,759 +0,0 @@
-/* Copyright (C) 2004, 2005, 2006, Free Software Foundation
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package java.awt.image;
-
-import gnu.java.awt.Buffers;
-import gnu.java.lang.CPStringBuilder;
-
-/**
- * A sample model that reads each sample value from a separate band in the
- * {@link DataBuffer}.
- *
- * @author Jerry Quinn (jlquinn@optonline.net)
- */
-public final class BandedSampleModel extends ComponentSampleModel
-{
- private int[] bitMasks;
- private int[] bitOffsets;
- private int[] sampleSize;
- private int dataBitOffset;
- private int elemBits;
- private int numberOfBits;
- private int numElems;
-
- private static int[] createBankArray(int size)
- {
- int[] result = new int[size];
- for (int i = 0; i < size; i++)
- result[i] = i;
- return result;
- }
-
- /**
- * Creates a new <code>BandedSampleModel</code>.
- *
- * @param dataType the data buffer type.
- * @param w the width (in pixels).
- * @param h the height (in pixels).
- * @param numBands the number of bands.
- */
- public BandedSampleModel(int dataType, int w, int h, int numBands)
- {
- this(dataType, w, h, w, createBankArray(numBands), new int[numBands]);
- }
-
- /**
- * Creates a new <code>BandedSampleModel</code>.
- *
- * @param dataType the data buffer type.
- * @param w the width (in pixels).
- * @param h the height (in pixels).
- * @param scanlineStride the number of data elements from a pixel in one
- * row to the corresponding pixel in the next row.
- * @param bankIndices the bank indices.
- * @param bandOffsets the band offsets.
- */
- public BandedSampleModel(int dataType, int w, int h, int scanlineStride,
- int[] bankIndices, int[] bandOffsets)
- {
- super(dataType, w, h, 1, scanlineStride, bankIndices, bandOffsets);
- }
-
- /**
- * Creates a new data buffer that is compatible with this sample model.
- *
- * @return The new data buffer.
- */
- public DataBuffer createDataBuffer()
- {
- int size = scanlineStride * height;
- return Buffers.createBuffer(getDataType(), size, numBanks);
- }
-
- /**
- * Creates a new <code>SampleModel</code> that is compatible with this
- * model and has the specified width and height.
- *
- * @param w the width (in pixels, must be greater than zero).
- * @param h the height (in pixels, must be greater than zero).
- *
- * @return The new sample model.
- *
- * @throws IllegalArgumentException if <code>w</code> or <code>h</code> is
- * not greater than zero.
- * @throws IllegalArgumentException if <code>w * h</code> exceeds
- * <code>Integer.MAX_VALUE</code>.
- */
- public SampleModel createCompatibleSampleModel(int w, int h)
- {
- // NOTE: blackdown 1.4.1 sets all offsets to 0. Sun's 1.4.2 docs
- // disagree.
-
- // Compress offsets so minimum is 0, others w*scanlineStride
- int[] newoffsets = new int[bandOffsets.length];
- int[] order = new int[bandOffsets.length];
- for (int i = 0; i < bandOffsets.length; i++)
- order[i] = i;
- // FIXME: This is N^2, but not a big issue, unless there's a lot of
- // bands...
- for (int i = 0; i < bandOffsets.length; i++)
- for (int j = i + 1; j < bandOffsets.length; j++)
- if (bankIndices[order[i]] > bankIndices[order[j]]
- || (bankIndices[order[i]] == bankIndices[order[j]]
- && bandOffsets[order[i]] > bandOffsets[order[j]]))
- {
- int t = order[i]; order[i] = order[j]; order[j] = t;
- }
- int bank = 0;
- int offset = 0;
- for (int i = 0; i < bandOffsets.length; i++)
- {
- if (bankIndices[order[i]] != bank)
- {
- bank = bankIndices[order[i]];
- offset = 0;
- }
- newoffsets[order[i]] = offset;
- offset += w * scanlineStride;
- }
-
- return new BandedSampleModel(dataType, w, h, w, bankIndices, newoffsets);
- }
-
-
- public SampleModel createSubsetSampleModel(int[] bands)
- {
- if (bands.length > bankIndices.length)
- throw new
- RasterFormatException("BandedSampleModel createSubsetSampleModel too"
- +" many bands");
- int[] newoff = new int[bands.length];
- int[] newbanks = new int[bands.length];
- for (int i = 0; i < bands.length; i++)
- {
- int b = bands[i];
- newoff[i] = bandOffsets[b];
- newbanks[i] = bankIndices[b];
- }
-
- return new BandedSampleModel(dataType, width, height, scanlineStride,
- newbanks, newoff);
- }
-
- /**
- * Extract all samples of one pixel and return in an array of transfer type.
- *
- * Extracts the pixel at x, y from data and stores samples into the array
- * obj. If obj is null, a new array of getTransferType() is created.
- *
- * @param x The x-coordinate of the pixel rectangle to store in
- * <code>obj</code>.
- * @param y The y-coordinate of the pixel rectangle to store in
- * <code>obj</code>.
- * @param obj The primitive array to store the pixels into or null to force
- * creation.
- * @param data The DataBuffer that is the source of the pixel data.
- * @return The primitive array containing the pixel data.
- * @see java.awt.image.SampleModel#getDataElements(int, int,
- * java.lang.Object, java.awt.image.DataBuffer)
- */
- public Object getDataElements(int x, int y, Object obj, DataBuffer data)
- {
- if (x < 0 || y < 0)
- throw new ArrayIndexOutOfBoundsException(
- "x and y must not be less than 0.");
- int pixel = getSample(x, y, 0, data);
- switch (getTransferType())
- {
- case DataBuffer.TYPE_BYTE:
- {
- byte[] b = (byte[]) obj;
- if (b == null) b = new byte[numBands];
- for (int i = 0; i < numBands; i++)
- b[i] = (byte)getSample(x, y, i, data);
- return b;
- }
- case DataBuffer.TYPE_SHORT:
- case DataBuffer.TYPE_USHORT:
- {
- short[] b = (short[]) obj;
- if (b == null) b = new short[numBands];
- for (int i = 0; i < numBands; i++)
- b[i] = (short)getSample(x, y, i, data);
- return b;
- }
- case DataBuffer.TYPE_INT:
- {
- int[] b = (int[]) obj;
- if (b == null) b = new int[numBands];
- for (int i = 0; i < numBands; i++)
- b[i] = getSample(x, y, i, data);
- return b;
- }
- case DataBuffer.TYPE_FLOAT:
- {
- float[] b = (float[]) obj;
- if (b == null) b = new float[numBands];
- for (int i = 0; i < numBands; i++)
- b[i] = getSampleFloat(x, y, i, data);
- return b;
- }
- case DataBuffer.TYPE_DOUBLE:
- {
- double[] b = (double[]) obj;
- if (b == null)
- b = new double[numBands];
- for (int i = 0; i < numBands; i++)
- b[i] = getSample(x, y, i, data);
- return b;
- }
-
- default:
- // Seems like the only sensible thing to do.
- throw new ClassCastException();
- }
- }
-
- /**
- * Returns all the samples for the pixel at location <code>(x, y)</code>
- * stored in the specified data buffer.
- *
- * @param x the x-coordinate.
- * @param y the y-coordinate.
- * @param iArray an array that will be populated with the sample values and
- * returned as the result. The size of this array should be equal to the
- * number of bands in the model. If the array is <code>null</code>, a new
- * array is created.
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @return The samples for the specified pixel.
- *
- * @see #setPixel(int, int, int[], DataBuffer)
- */
- public int[] getPixel(int x, int y, int[] iArray, DataBuffer data)
- {
- if (iArray == null)
- iArray = new int[numBands];
- for (int i = 0; i < numBands; i++)
- iArray[i] = getSample(x, y, i, data);
-
- return iArray;
- }
-
- /**
- * Copy pixels from a region into an array.
- *
- * Copies the samples of the pixels in the rectangle starting at x, y that
- * is w pixels wide and h scanlines high. When there is more than one band,
- * the samples stored in order before the next pixel. This ordering isn't
- * well specified in Sun's docs as of 1.4.2.
- *
- * If iArray is null, a new array is allocated, filled, and returned.
- *
- * @param x The x-coordinate of the pixel rectangle to store in
- * <code>iArray</code>.
- * @param y The y-coordinate of the pixel rectangle to store in
- * <code>iArray</code>.
- * @param w The width in pixels of the rectangle.
- * @param h The height in pixels of the rectangle.
- * @param iArray The int array to store the pixels into or null to force
- * creation.
- * @param data The DataBuffer that is the source of the pixel data.
- * @return The primitive array containing the pixel data.
- */
- public int[] getPixels(int x, int y, int w, int h, int[] iArray,
- DataBuffer data)
- {
- if (x < 0 || y < 0)
- throw new ArrayIndexOutOfBoundsException(
- "x and y must not be less than 0.");
- if (iArray == null)
- iArray = new int[w * h * numBands];
- int outOffset = 0;
- int maxX = x + w;
- int maxY = y + h;
- for (int yy = x; yy < maxY; yy++)
- {
- for (int xx = x; xx < maxX; xx++)
- {
- for (int b = 0; b < numBands; b++)
- {
- int offset = bandOffsets[b] + yy * scanlineStride + xx;
- iArray[outOffset++] =
- data.getElem(bankIndices[b], offset);
- }
- }
- }
- return iArray;
- }
-
- /**
- * Returns a sample value for the pixel at (x, y) in the specified data
- * buffer.
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param b the band (in the range <code>0</code> to
- * <code>getNumBands() - 1</code>).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @return The sample value.
- *
- * @throws NullPointerException if <code>data</code> is <code>null</code>.
- */
- public int getSample(int x, int y, int b, DataBuffer data)
- {
- int offset = bandOffsets[b] + y * scanlineStride + x;
- return data.getElem(bankIndices[b], offset);
- }
-
- /**
- * Returns a sample value for the pixel at (x, y) in the specified data
- * buffer.
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param b the band (in the range <code>0</code> to
- * <code>getNumBands() - 1</code>).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @return The sample value.
- *
- * @throws NullPointerException if <code>data</code> is <code>null</code>.
- *
- * @see #getSample(int, int, int, DataBuffer)
- */
- public float getSampleFloat(int x, int y, int b, DataBuffer data)
- {
- int offset = bandOffsets[b] + y * scanlineStride + x;
- return data.getElemFloat(bankIndices[b], offset);
- }
-
- /**
- * Returns the sample value for the pixel at (x, y) in the specified data
- * buffer.
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param b the band (in the range <code>0</code> to
- * <code>getNumBands() - 1</code>).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @return The sample value.
- *
- * @throws NullPointerException if <code>data</code> is <code>null</code>.
- *
- * @see #getSample(int, int, int, DataBuffer)
- */
- public double getSampleDouble(int x, int y, int b, DataBuffer data)
- {
- int offset = bandOffsets[b] + y * scanlineStride + x;
- return data.getElemDouble(bankIndices[b], offset);
- }
-
- /**
- * Copy one band's samples from a region into an array.
- *
- * Copies from one band the samples of the pixels in the rectangle starting
- * at x, y that is w pixels wide and h scanlines high.
- *
- * If iArray is null, a new array is allocated, filled, and returned.
- *
- * @param x The x-coordinate of the pixel rectangle to store in
- * <code>iArray</code>.
- * @param y The y-coordinate of the pixel rectangle to store in
- * <code>iArray</code>.
- * @param w The width in pixels of the rectangle.
- * @param h The height in pixels of the rectangle.
- * @param b The band to retrieve.
- * @param iArray The int array to store the pixels into or null to force
- * creation.
- * @param data The DataBuffer that is the source of the pixel data.
- * @return The primitive array containing the pixel data.
- */
- public int[] getSamples(int x, int y, int w, int h, int b, int[] iArray,
- DataBuffer data)
- {
- if (x < 0 || y < 0)
- throw new ArrayIndexOutOfBoundsException(
- "x and y must not be less than 0.");
- if (iArray == null)
- iArray = new int[w * h];
- int outOffset = 0;
- int maxX = x + w;
- int maxY = y + h;
- for (int yy = y; yy < maxY; yy++)
- {
- for (int xx = x; xx < maxX; xx++)
- {
- int offset = bandOffsets[b] + yy * scanlineStride + xx;
- iArray[outOffset++] =
- data.getElem(bankIndices[b], offset);
- }
- }
- return iArray;
- }
-
- /**
- * Set the pixel at x, y to the value in the first element of the primitive
- * array obj.
- *
- * @param x The x-coordinate of the data elements in <code>obj</code>.
- * @param y The y-coordinate of the data elements in <code>obj</code>.
- * @param obj The primitive array containing the data elements to set.
- * @param data The DataBuffer to store the data elements into.
- * @see java.awt.image.SampleModel#setDataElements(int, int, int, int, java.lang.Object, java.awt.image.DataBuffer)
- */
- public void setDataElements(int x, int y, Object obj, DataBuffer data)
- {
- int transferType = getTransferType();
- if (getTransferType() != data.getDataType())
- {
- throw new IllegalArgumentException("transfer type ("+
- getTransferType()+"), "+
- "does not match data "+
- "buffer type (" +
- data.getDataType() +
- ").");
- }
-
- int offset = y * scanlineStride + x;
-
- try
- {
- switch (transferType)
- {
- case DataBuffer.TYPE_BYTE:
- {
- DataBufferByte out = (DataBufferByte) data;
- byte[] in = (byte[]) obj;
- for (int i = 0; i < numBands; i++)
- out.getData(bankIndices[i])[offset + bandOffsets[i]] = in[i];
- return;
- }
- case DataBuffer.TYPE_SHORT:
- {
- DataBufferShort out = (DataBufferShort) data;
- short[] in = (short[]) obj;
- for (int i = 0; i < numBands; i++)
- out.getData(bankIndices[i])[offset + bandOffsets[i]] = in[i];
- return;
- }
- case DataBuffer.TYPE_USHORT:
- {
- DataBufferUShort out = (DataBufferUShort) data;
- short[] in = (short[]) obj;
- for (int i = 0; i < numBands; i++)
- out.getData(bankIndices[i])[offset + bandOffsets[i]] = in[i];
- return;
- }
- case DataBuffer.TYPE_INT:
- {
- DataBufferInt out = (DataBufferInt) data;
- int[] in = (int[]) obj;
- for (int i = 0; i < numBands; i++)
- out.getData(bankIndices[i])[offset + bandOffsets[i]] = in[i];
- return;
- }
- case DataBuffer.TYPE_FLOAT:
- {
- DataBufferFloat out = (DataBufferFloat) data;
- float[] in = (float[]) obj;
- for (int i = 0; i < numBands; i++)
- out.getData(bankIndices[i])[offset + bandOffsets[i]] = in[i];
- return;
- }
- case DataBuffer.TYPE_DOUBLE:
- {
- DataBufferDouble out = (DataBufferDouble) data;
- double[] in = (double[]) obj;
- for (int i = 0; i < numBands; i++)
- out.getData(bankIndices[i])[offset + bandOffsets[i]] = in[i];
- return;
- }
- default:
- throw new ClassCastException("Unsupported data type");
- }
- }
- catch (ArrayIndexOutOfBoundsException aioobe)
- {
- String msg = "While writing data elements"
- + ", x=" + x + ", y=" + y
- + ", width=" + width + ", height=" + height
- + ", scanlineStride=" + scanlineStride
- + ", offset=" + offset
- + ", data.getSize()=" + data.getSize()
- + ", data.getOffset()=" + data.getOffset()
- + ": " + aioobe;
- throw new ArrayIndexOutOfBoundsException(msg);
- }
- }
-
- /**
- * Sets the samples for the pixel at (x, y) in the specified data buffer to
- * the specified values.
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param iArray the sample values (<code>null</code> not permitted).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @throws NullPointerException if either <code>iArray</code> or
- * <code>data</code> is <code>null</code>.
- */
- public void setPixel(int x, int y, int[] iArray, DataBuffer data)
- {
- for (int b = 0; b < numBands; b++)
- data.setElem(bankIndices[b], bandOffsets[b] + y * scanlineStride + x,
- iArray[b]);
- }
-
- /**
- * Sets the sample values for the pixels in the region specified by
- * (x, y, w, h) in the specified data buffer. The array is
- * ordered by pixels (that is, all the samples for the first pixel are
- * grouped together, followed by all the samples for the second pixel, and so
- * on).
- *
- * @param x the x-coordinate of the top-left pixel.
- * @param y the y-coordinate of the top-left pixel.
- * @param w the width of the region of pixels.
- * @param h the height of the region of pixels.
- * @param iArray the pixel sample values (<code>null</code> not permitted).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @throws NullPointerException if either <code>iArray</code> or
- * <code>data</code> is <code>null</code>.
- */
- public void setPixels(int x, int y, int w, int h, int[] iArray,
- DataBuffer data)
- {
- int inOffset = 0;
- for (int hh = 0; hh < h; hh++)
- {
- for (int ww = 0; ww < w; ww++)
- {
- int offset = y * scanlineStride + (x + ww);
- for (int b = 0; b < numBands; b++)
- data.setElem(bankIndices[b], bandOffsets[b] + offset,
- iArray[inOffset++]);
- }
- y++;
- }
- }
-
- /**
- * Sets the sample value for band <code>b</code> of the pixel at location
- * <code>(x, y)</code> in the specified data buffer.
- *
- * @param x the x-coordinate.
- * @param y the y-coordinate.
- * @param b the band index.
- * @param s the sample value.
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @see #getSample(int, int, int, DataBuffer)
- */
- public void setSample(int x, int y, int b, int s, DataBuffer data)
- {
- data.setElem(bankIndices[b], bandOffsets[b] + y * scanlineStride + x, s);
- }
-
- /**
- * Sets the sample value for a band for the pixel at (x, y) in the
- * specified data buffer.
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param b the band (in the range <code>0</code> to
- * <code>getNumBands() - 1</code>).
- * @param s the sample value.
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @throws NullPointerException if <code>data</code> is <code>null</code>.
- */
- public void setSample(int x, int y, int b, float s, DataBuffer data)
- {
- data.setElemFloat(bankIndices[b], bandOffsets[b] + y * scanlineStride + x,
- s);
- }
-
- /**
- * Sets the sample value for a band for the pixel at (x, y) in the
- * specified data buffer.
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param b the band (in the range <code>0</code> to
- * <code>getNumBands() - 1</code>).
- * @param s the sample value.
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @throws NullPointerException if <code>data</code> is <code>null</code>.
- */
- public void setSample(int x, int y, int b, double s, DataBuffer data)
- {
- data.setElemDouble(bankIndices[b], bandOffsets[b] + y * scanlineStride + x,
- s);
- }
-
- /**
- * Sets the sample values for one band for the pixels in the region
- * specified by (x, y, w, h) in the specified data buffer.
- *
- * @param x the x-coordinate of the top-left pixel.
- * @param y the y-coordinate of the top-left pixel.
- * @param w the width of the region of pixels.
- * @param h the height of the region of pixels.
- * @param b the band (in the range <code>0</code> to
- * </code>getNumBands() - 1</code>).
- * @param iArray the sample values (<code>null</code> not permitted).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @throws NullPointerException if either <code>iArray</code> or
- * <code>data</code> is <code>null</code>.
- */
- public void setSamples(int x, int y, int w, int h, int b, int[] iArray,
- DataBuffer data)
- {
- if (x < 0 || y < 0)
- throw new ArrayIndexOutOfBoundsException(
- "x and y must not be less than 0.");
- int inOffset = 0;
-
- switch (getTransferType())
- {
- case DataBuffer.TYPE_BYTE:
- {
- DataBufferByte out = (DataBufferByte) data;
- byte[] bank = out.getData(bankIndices[b]);
- for (int hh = 0; hh < h; hh++)
- {
- for (int ww = 0; ww < w; ww++)
- {
- int offset = bandOffsets[b] + y * scanlineStride + (x + ww);
- bank[offset] = (byte)iArray[inOffset++];
- }
- y++;
- }
- return;
- }
- case DataBuffer.TYPE_SHORT:
- {
- DataBufferShort out = (DataBufferShort) data;
- short[] bank = out.getData(bankIndices[b]);
- for (int hh = 0; hh < h; hh++)
- {
- for (int ww = 0; ww < w; ww++)
- {
- int offset = bandOffsets[b] + y * scanlineStride + (x + ww);
- bank[offset] = (short)iArray[inOffset++];
- }
- y++;
- }
- return;
- }
- case DataBuffer.TYPE_USHORT:
- {
- DataBufferShort out = (DataBufferShort) data;
- short[] bank = out.getData(bankIndices[b]);
- for (int hh = 0; hh < h; hh++)
- {
- for (int ww = 0; ww < w; ww++)
- {
- int offset = bandOffsets[b] + y * scanlineStride + (x + ww);
- bank[offset] = (short)iArray[inOffset++];
- }
- y++;
- }
- return;
- }
- case DataBuffer.TYPE_INT:
- {
- DataBufferInt out = (DataBufferInt) data;
- int[] bank = out.getData(bankIndices[b]);
- for (int hh = 0; hh < h; hh++)
- {
- for (int ww = 0; ww < w; ww++)
- {
- int offset = bandOffsets[b] + y * scanlineStride + (x + ww);
- bank[offset] = iArray[inOffset++];
- }
- y++;
- }
- return;
- }
- case DataBuffer.TYPE_FLOAT:
- case DataBuffer.TYPE_DOUBLE:
- break;
- default:
- throw new ClassCastException("Unsupported data type");
- }
-
- // Default implementation probably slower for float and double
- for (int hh = 0; hh < h; hh++)
- {
- for (int ww = 0; ww < w; ww++)
- {
- int offset = bandOffsets[b] + y * scanlineStride + (x + ww);
- data.setElem(bankIndices[b], offset, iArray[inOffset++]);
- }
- y++;
- }
- }
-
- /**
- * Creates a String with some information about this SampleModel.
- * @return A String describing this SampleModel.
- * @see java.lang.Object#toString()
- */
- public String toString()
- {
- CPStringBuilder result = new CPStringBuilder();
- result.append(getClass().getName());
- result.append("[");
- result.append("scanlineStride=").append(scanlineStride);
- for(int i = 0; i < bitMasks.length; i+=1)
- {
- result.append(", mask[").append(i).append("]=0x").append(
- Integer.toHexString(bitMasks[i]));
- }
-
- result.append("]");
- return result.toString();
- }
-}
diff --git a/libjava/classpath/java/awt/image/BufferStrategy.java b/libjava/classpath/java/awt/image/BufferStrategy.java
deleted file mode 100644
index e86aad6..0000000
--- a/libjava/classpath/java/awt/image/BufferStrategy.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/* BufferStrategy.java -- describes image buffering resources
- Copyright (C) 2002, 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-import java.awt.BufferCapabilities;
-import java.awt.Graphics;
-
-/**
- * This class describes a strategy for managing image buffering
- * resources on a Canvas or Window. A given buffer strategy may make
- * use of hardware acceleration or take advantage of features of the
- * native graphics system. Examples of buffering strategies are
- * double or triple buffering using either flipping or blitting. For
- * the details of these algorithms see BufferCapabilities.
- *
- * To use a buffer strategy, you retrieve it from either the current
- * GraphicsConfiguration or from the Component on which you'd like to
- * draw. Then you can query the strategy's capabilities to make sure
- * they're suitable.
- *
- * If the strategy's capabilities are suitable, you can obtain a
- * graphics object and use it to draw with this strategy. Drawing
- * with a buffer strategy requires extra care, however. You'll need
- * to manually cause the next buffer to be shown on the output device.
- * And since buffer strategies are usually implemented with a
- * VolatileImage, you must frequently check that the contents of the
- * buffer are valid and that the buffer still exists.
- *
- * A buffer strategy is usually implemented using a VolatileImage.
- *
- * @see VolatileImage
- * @since 1.4
- */
-public abstract class BufferStrategy
-{
- /**
- * Creates a new buffer strategy.
- */
- public BufferStrategy()
- {
- }
-
- /**
- * Retrieves the capabilities of this buffer strategy.
- *
- * @return this buffer strategy's capabilities
- */
- public abstract BufferCapabilities getCapabilities();
-
- /**
- * Retrieves a graphics object that can be used to draw using this
- * buffer strategy. This method may not be synchronized so be
- * careful when calling it from multiple threads. You also must
- * manually dispose of this graphics object.
- *
- * @return a graphics object that can be used to draw using this
- * buffer strategy
- */
- public abstract Graphics getDrawGraphics();
-
- /**
- * Returns whether or not the buffer's resources have been reclaimed
- * by the native graphics system. If the buffer resources have been
- * lost then you'll need to obtain new resources before drawing
- * again. For details, see the documentation for VolatileImage.
- *
- * @return true if the contents were lost, false otherwise
- */
- public abstract boolean contentsLost();
-
- /**
- * Returns whether or not the buffer's resources were re-created and
- * cleared to the default background color. If the buffer's
- * resources have recently been re-created and initialized then the
- * buffer's image may need to be re-rendered. For details, see the
- * documentation for VolatileImage.
- *
- * @return true if the contents were restored, false otherwise
- */
- public abstract boolean contentsRestored();
-
- /**
- * Applies this buffer strategy. In other words, this method brings
- * the contents of the back or intermediate buffers to the front
- * buffer.
- */
- public abstract void show();
-}
diff --git a/libjava/classpath/java/awt/image/BufferedImage.java b/libjava/classpath/java/awt/image/BufferedImage.java
deleted file mode 100644
index 094c71d..0000000
--- a/libjava/classpath/java/awt/image/BufferedImage.java
+++ /dev/null
@@ -1,839 +0,0 @@
-/* BufferedImage.java --
- Copyright (C) 2000, 2002, 2003, 2004, 2005, 2006, Free Software Foundation
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-import gnu.java.awt.Buffers;
-import gnu.java.awt.ClasspathGraphicsEnvironment;
-import gnu.java.awt.ComponentDataBlitOp;
-import gnu.java.lang.CPStringBuilder;
-
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.GraphicsEnvironment;
-import java.awt.Image;
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.Transparency;
-import java.awt.color.ColorSpace;
-import java.util.Hashtable;
-import java.util.Vector;
-
-/**
- * A buffered image always starts at coordinates (0, 0).
- *
- * The buffered image is not subdivided into multiple tiles. Instead,
- * the image consists of one large tile (0,0) with the width and
- * height of the image. This tile is always considered to be checked
- * out.
- *
- * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
- */
-public class BufferedImage extends Image
- implements WritableRenderedImage, Transparency
-{
- public static final int TYPE_CUSTOM = 0,
- TYPE_INT_RGB = 1,
- TYPE_INT_ARGB = 2,
- TYPE_INT_ARGB_PRE = 3,
- TYPE_INT_BGR = 4,
- TYPE_3BYTE_BGR = 5,
- TYPE_4BYTE_ABGR = 6,
- TYPE_4BYTE_ABGR_PRE = 7,
- TYPE_USHORT_565_RGB = 8,
- TYPE_USHORT_555_RGB = 9,
- TYPE_BYTE_GRAY = 10,
- TYPE_USHORT_GRAY = 11,
- TYPE_BYTE_BINARY = 12,
- TYPE_BYTE_INDEXED = 13;
-
- /**
- * Vector of TileObservers (or null)
- */
- Vector<TileObserver> tileObservers;
-
- /**
- * The image's WritableRaster
- */
- WritableRaster raster;
-
- /**
- * The associated ColorModel
- */
- ColorModel colorModel;
-
- /**
- * The image's properties (or null)
- */
- Hashtable properties;
-
- /**
- * Whether alpha is premultiplied
- */
- boolean isPremultiplied;
-
- /**
- * The predefined type, if any.
- */
- int type;
-
- /**
- * Creates a new <code>BufferedImage</code> with the specified width, height
- * and type. Valid <code>type</code> values are:
- *
- * <ul>
- * <li>{@link #TYPE_INT_RGB}</li>
- * <li>{@link #TYPE_INT_ARGB}</li>
- * <li>{@link #TYPE_INT_ARGB_PRE}</li>
- * <li>{@link #TYPE_INT_BGR}</li>
- * <li>{@link #TYPE_3BYTE_BGR}</li>
- * <li>{@link #TYPE_4BYTE_ABGR}</li>
- * <li>{@link #TYPE_4BYTE_ABGR_PRE}</li>
- * <li>{@link #TYPE_USHORT_565_RGB}</li>
- * <li>{@link #TYPE_USHORT_555_RGB}</li>
- * <li>{@link #TYPE_BYTE_GRAY}</li>
- * <li>{@link #TYPE_USHORT_GRAY}</li>
- * <li>{@link #TYPE_BYTE_BINARY}</li>
- * <li>{@link #TYPE_BYTE_INDEXED}</li>
- * </ul>
- *
- * @param width the width (must be > 0).
- * @param height the height (must be > 0).
- * @param type the image type (see the list of valid types above).
- *
- * @throws IllegalArgumentException if <code>width</code> or
- * <code>height</code> is less than or equal to zero.
- * @throws IllegalArgumentException if <code>type</code> is not one of the
- * specified values.
- */
- public BufferedImage(int width, int height, int type)
- {
- SampleModel sm = null;
- ColorModel cm = null;
- boolean premultiplied = (type == BufferedImage.TYPE_INT_ARGB_PRE
- || type == BufferedImage.TYPE_4BYTE_ABGR_PRE);
-
- switch( type )
- {
- case BufferedImage.TYPE_INT_RGB:
- sm = new SinglePixelPackedSampleModel( DataBuffer.TYPE_INT,
- width, height,
- new int[]{ 0x00FF0000,
- 0x0000FF00,
- 0x000000FF } ) ;
- cm = new DirectColorModel( 24, 0xff0000, 0xff00, 0xff );
- break;
-
- case BufferedImage.TYPE_3BYTE_BGR:
- sm = new PixelInterleavedSampleModel( DataBuffer.TYPE_BYTE,
- width, height,
- 3, width * 3,
- new int[]{ 2, 1, 0 } );
- cm = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB),
- false, false,
- BufferedImage.OPAQUE,
- DataBuffer.TYPE_BYTE);
- break;
-
- case BufferedImage.TYPE_INT_ARGB:
- case BufferedImage.TYPE_INT_ARGB_PRE:
- sm = new SinglePixelPackedSampleModel( DataBuffer.TYPE_INT,
- width, height,
- new int[]{ 0x00FF0000,
- 0x0000FF00,
- 0x000000FF,
- 0xFF000000 } );
- if (premultiplied)
- cm = new DirectColorModel( ColorSpace.getInstance(ColorSpace.CS_sRGB),
- 32, 0xff0000, 0xff00, 0xff, 0xff000000,
- true,
- Buffers.smallestAppropriateTransferType(32));
- else
- cm = new DirectColorModel( 32, 0xff0000, 0xff00, 0xff, 0xff000000 );
-
- break;
-
- case BufferedImage.TYPE_4BYTE_ABGR:
- case BufferedImage.TYPE_4BYTE_ABGR_PRE:
- sm = new PixelInterleavedSampleModel(DataBuffer.TYPE_BYTE,
- width, height,
- 4, 4*width,
- new int[]{3, 2, 1, 0});
- cm = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB),
- true, premultiplied,
- BufferedImage.TRANSLUCENT,
- DataBuffer.TYPE_BYTE);
- break;
-
- case BufferedImage.TYPE_INT_BGR:
- sm = new SinglePixelPackedSampleModel( DataBuffer.TYPE_INT,
- width, height,
- new int[]{ 0x000000FF,
- 0x0000FF00,
- 0x00FF0000 } ) ;
- cm = new DirectColorModel( 24, 0xff, 0xff00, 0xff0000 );
- break;
-
- case BufferedImage.TYPE_USHORT_565_RGB:
- sm = new SinglePixelPackedSampleModel( DataBuffer.TYPE_USHORT,
- width, height,
- new int[]{ 0xF800,
- 0x7E0,
- 0x1F } ) ;
- cm = new DirectColorModel( 16, 0xF800, 0x7E0, 0x1F );
- break;
-
- case BufferedImage.TYPE_USHORT_555_RGB:
- sm = new SinglePixelPackedSampleModel( DataBuffer.TYPE_USHORT,
- width, height,
- new int[]{ 0x7C00,
- 0x3E0,
- 0x1F } ) ;
- cm = new DirectColorModel( 15, 0x7C00, 0x3E0, 0x1F );
- break;
-
- case BufferedImage.TYPE_BYTE_INDEXED:
- cm = createDefaultIndexedColorModel( false );
-
- case BufferedImage.TYPE_BYTE_GRAY:
- sm = new PixelInterleavedSampleModel( DataBuffer.TYPE_BYTE,
- width, height,
- 1, width, new int[]{ 0 } );
- break;
-
- case BufferedImage.TYPE_USHORT_GRAY:
- sm = new PixelInterleavedSampleModel( DataBuffer.TYPE_USHORT,
- width, height,
- 1, width, new int[]{ 0 } );
- break;
-
- case BufferedImage.TYPE_BYTE_BINARY:
- cm = createDefaultIndexedColorModel( true );
- sm = new MultiPixelPackedSampleModel(DataBuffer.TYPE_BYTE,
- width, height, 1);
- break;
-
- default:
- sm = null;
- }
-
- if( sm == null )
- throw new IllegalArgumentException("Unknown predefined image type.");
-
- if( cm == null ) // only for the grayscale types
- {
- int buftype;
- int[] bits = new int[1];
- if( type == BufferedImage.TYPE_BYTE_GRAY )
- {
- buftype = DataBuffer.TYPE_BYTE;
- bits[0] = 8;
- }
- else
- {
- buftype = DataBuffer.TYPE_USHORT;
- bits[0] = 16;
- }
- ColorSpace graySpace = ColorSpace.getInstance( ColorSpace.CS_GRAY );
-
- cm = new ComponentColorModel( graySpace, bits, false, false,
- Transparency.OPAQUE, buftype );
- }
-
- WritableRaster rst = null;
-
- // Attempt to create an accelerated backend for this image
- GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
- if (env instanceof ClasspathGraphicsEnvironment)
- rst = ((ClasspathGraphicsEnvironment)env).createRaster(cm, sm);
-
- // Default to a standard Java raster & databuffer if needed
- if (rst == null)
- rst = Raster.createWritableRaster(sm, new Point( 0, 0 ) );
-
- init(cm, rst, premultiplied,
- null, // no properties
- type );
- }
-
- public BufferedImage(int w, int h, int type, IndexColorModel indexcolormodel)
- {
- if ((type != TYPE_BYTE_BINARY) && (type != TYPE_BYTE_INDEXED))
- throw new IllegalArgumentException("Type must be TYPE_BYTE_BINARY or TYPE_BYTE_INDEXED");
- if( indexcolormodel.getMapSize() > 16 && type == TYPE_BYTE_BINARY )
- throw new IllegalArgumentException("Type TYPE_BYTE_BINARY cannot have a larger than 16-color palette.");
- if( indexcolormodel.getMapSize() > 256 )
- throw new IllegalArgumentException("Byte type cannot have a larger than 256-color palette.");
-
- init( indexcolormodel,
- indexcolormodel.createCompatibleWritableRaster(w, h),
- indexcolormodel.isAlphaPremultiplied(),
- null, // no properties
- type );
- }
-
- public BufferedImage(ColorModel colormodel, WritableRaster writableraster,
- boolean premultiplied, Hashtable<?,?> properties)
- {
- init(colormodel, writableraster, premultiplied, properties, TYPE_CUSTOM);
- }
-
-
- private void init(ColorModel cm, WritableRaster writableraster,
- boolean premultiplied, Hashtable properties, int type)
- {
- raster = writableraster;
- colorModel = cm;
- this.properties = properties;
- isPremultiplied = premultiplied;
- this.type = type;
- }
-
- /**
- * Creates the default palettes for the predefined indexed color types
- * (256-color or black-and-white)
- *
- * @param binary - If <code>true</code>, a black and white palette,
- * otherwise a default 256-color palette is returned.
- */
- private IndexColorModel createDefaultIndexedColorModel( boolean binary )
- {
- if( binary )
- {
- byte[] t = new byte[]{ 0, (byte)255 };
- return new IndexColorModel( 1, 2, t, t, t );
- }
-
- byte[] r = new byte[256];
- byte[] g = new byte[256];
- byte[] b = new byte[256];
-
- int index = 0;
- for( int i = 0; i < 6; i++ )
- for( int j = 0; j < 6; j++ )
- for( int k = 0; k < 6; k++ )
- {
- r[ index ] = (byte)(i * 51);
- g[ index ] = (byte)(j * 51);
- b[ index ] = (byte)(k * 51);
- index++;
- }
-
- while( index < 256 )
- {
- r[ index ] = g[ index ] = b[ index ] =
- (byte)(18 + (index - 216) * 6);
- index++;
- }
-
- return new IndexColorModel( 8, 256, r, g, b );
- }
-
- public void coerceData(boolean premultiplied)
- {
- colorModel = colorModel.coerceData(raster, premultiplied);
- isPremultiplied = premultiplied;
- }
-
- public WritableRaster copyData(WritableRaster dest)
- {
- if (dest == null)
- dest = raster.createCompatibleWritableRaster(getMinX(), getMinY(),
- getWidth(),getHeight());
-
- int x = dest.getMinX();
- int y = dest.getMinY();
- int w = dest.getWidth();
- int h = dest.getHeight();
-
- // create a src child that has the right bounds...
- WritableRaster src =
- raster.createWritableChild(x, y, w, h, x, y,
- null); // same bands
-
- if (src.getSampleModel () instanceof ComponentSampleModel
- && dest.getSampleModel () instanceof ComponentSampleModel)
- // Refer to ComponentDataBlitOp for optimized data blitting:
- ComponentDataBlitOp.INSTANCE.filter(src, dest);
-
- else
- {
- // slower path
- int samples[] = src.getPixels (x, y, w, h, (int [])null);
- dest.setPixels (x, y, w, h, samples);
- }
- return dest;
- }
-
- public Graphics2D createGraphics()
- {
- GraphicsEnvironment env;
- env = GraphicsEnvironment.getLocalGraphicsEnvironment ();
- return env.createGraphics (this);
- }
-
- public void flush()
- {
- }
-
- public WritableRaster getAlphaRaster()
- {
- return colorModel.getAlphaRaster(raster);
- }
-
- public ColorModel getColorModel()
- {
- return colorModel;
- }
-
- public Raster getData()
- {
- return copyData(null);
- /* TODO: this might be optimized by returning the same
- raster (not writable) as long as image data doesn't change. */
- }
-
- public Raster getData(Rectangle rectangle)
- {
- WritableRaster dest =
- raster.createCompatibleWritableRaster(rectangle);
- return copyData(dest);
- }
-
- public Graphics getGraphics()
- {
- return createGraphics();
- }
-
- public int getHeight()
- {
- return raster.getHeight();
- }
-
- public int getHeight(ImageObserver imageobserver)
- {
- return getHeight();
- }
-
- public int getMinTileX()
- {
- return 0;
- }
-
- public int getMinTileY()
- {
- return 0;
- }
-
- public int getMinX()
- {
- return 0;
- }
-
- public int getMinY()
- {
- return 0;
- }
-
- public int getNumXTiles()
- {
- return 1;
- }
-
- public int getNumYTiles()
- {
- return 1;
- }
-
- /**
- * Returns the value of the specified property, or
- * {@link Image#UndefinedProperty} if the property is not defined.
- *
- * @param string the property key (<code>null</code> not permitted).
- *
- * @return The property value.
- *
- * @throws NullPointerException if <code>string</code> is <code>null</code>.
- */
- public Object getProperty(String string)
- {
- if (string == null)
- throw new NullPointerException("The property name cannot be null.");
- Object result = Image.UndefinedProperty;
- if (properties != null)
- {
- Object v = properties.get(string);
- if (v != null)
- result = v;
- }
- return result;
- }
-
- public Object getProperty(String string, ImageObserver imageobserver)
- {
- return getProperty(string);
- }
-
- /**
- * Returns <code>null</code> always.
- *
- * @return <code>null</code> always.
- */
- public String[] getPropertyNames()
- {
- // This method should always return null, see:
- // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4640609
- return null;
- }
-
- public int getRGB(int x, int y)
- {
- Object rgbElem = raster.getDataElements(x, y, null);
- return colorModel.getRGB(rgbElem);
- }
-
- public int[] getRGB(int startX, int startY, int w, int h, int[] rgbArray,
- int offset, int scanlineStride)
- {
- if (rgbArray == null)
- {
- /*
- 000000000000000000
- 00000[#######----- [ = start
- -----########----- ] = end
- -----#######]00000
- 000000000000000000
- */
- int size = (h-1)*scanlineStride + w;
- rgbArray = new int[size];
- }
-
- int endX = startX + w;
- int endY = startY + h;
-
- /* *TODO*:
- Opportunity for optimization by examining color models...
-
- Perhaps wrap the rgbArray up in a WritableRaster with packed
- sRGB color model and perform optimized rendering into the
- array. */
-
- Object rgbElem = null;
- for (int y=startY; y<endY; y++)
- {
- int xoffset = offset;
- for (int x=startX; x<endX; x++)
- {
- int rgb;
- rgbElem = raster.getDataElements(x, y, rgbElem);
- rgb = colorModel.getRGB(rgbElem);
- rgbArray[xoffset++] = rgb;
- }
- offset += scanlineStride;
- }
- return rgbArray;
- }
-
- public WritableRaster getRaster()
- {
- return raster;
- }
-
- public SampleModel getSampleModel()
- {
- return raster.getSampleModel();
- }
-
- public ImageProducer getSource()
- {
- return new ImageProducer()
- {
- Vector<ImageConsumer> consumers = new Vector<ImageConsumer>();
-
- public void addConsumer(ImageConsumer ic)
- {
- if(!consumers.contains(ic))
- consumers.add(ic);
- }
-
- public boolean isConsumer(ImageConsumer ic)
- {
- return consumers.contains(ic);
- }
-
- public void removeConsumer(ImageConsumer ic)
- {
- consumers.remove(ic);
- }
-
- public void startProduction(ImageConsumer ic)
- {
- int x = 0;
- int y = 0;
- int width = getWidth();
- int height = getHeight();
- int stride = width;
- int offset = 0;
- int[] pixels = getRGB(x, y,
- width, height,
- (int[])null, offset, stride);
- // We already convert the color to RGB in the getRGB call, so
- // we pass a simple RGB color model to the consumers.
- ColorModel model = new DirectColorModel(32, 0xff0000, 0xff00, 0xff,
- 0xff000000);
-
- consumers.add(ic);
-
- for(int i = 0; i < consumers.size(); i++)
- {
- ImageConsumer c = consumers.elementAt(i);
- c.setHints(ImageConsumer.SINGLEPASS);
- c.setDimensions(getWidth(), getHeight());
- c.setPixels(x, y, width, height, model, pixels, offset, stride);
- c.imageComplete(ImageConsumer.STATICIMAGEDONE);
- }
- }
-
- public void requestTopDownLeftRightResend(ImageConsumer ic)
- {
- startProduction(ic);
- }
-
- };
- }
-
- public Vector<RenderedImage> getSources()
- {
- return null;
- }
-
- public BufferedImage getSubimage(int x, int y, int w, int h)
- {
- WritableRaster subRaster =
- getRaster().createWritableChild(x, y, w, h, 0, 0, null);
-
- return new BufferedImage(getColorModel(), subRaster, isPremultiplied,
- properties);
- }
-
- public Raster getTile(int tileX, int tileY)
- {
- return getWritableTile(tileX, tileY);
- }
-
- public int getTileGridXOffset()
- {
- return 0; // according to javadocs
- }
-
- public int getTileGridYOffset()
- {
- return 0; // according to javadocs
- }
-
- public int getTileHeight()
- {
- return getHeight(); // image is one big tile
- }
-
- public int getTileWidth()
- {
- return getWidth(); // image is one big tile
- }
-
- public int getType()
- {
- return type;
- }
-
- public int getWidth()
- {
- return raster.getWidth();
- }
-
- public int getWidth(ImageObserver imageobserver)
- {
- return getWidth();
- }
-
- public WritableRaster getWritableTile(int tileX, int tileY)
- {
- isTileWritable(tileX, tileY); // for exception
- return raster;
- }
-
- private static final Point[] tileIndices = { new Point() };
-
- public Point[] getWritableTileIndices()
- {
- return tileIndices;
- }
-
- public boolean hasTileWriters()
- {
- return true;
- }
-
- public boolean isAlphaPremultiplied()
- {
- return isPremultiplied;
- }
-
- public boolean isTileWritable(int tileX, int tileY)
- {
- if ((tileX != 0) || (tileY != 0))
- throw new ArrayIndexOutOfBoundsException("only tile is (0,0)");
- return true;
- }
-
- public void releaseWritableTile(int tileX, int tileY)
- {
- isTileWritable(tileX, tileY); // for exception
- }
-
- //public void removeTileObserver(TileObserver tileobserver) {}
-
- public void setData(Raster src)
- {
- int x = src.getMinX();
- int y = src.getMinY();
- int w = src.getWidth();
- int h = src.getHeight();
-
- // create a dest child that has the right bounds...
- WritableRaster dest =
- raster.createWritableChild(x, y, w, h, x, y, null);
-
- if (src.getSampleModel () instanceof ComponentSampleModel
- && dest.getSampleModel () instanceof ComponentSampleModel)
-
- // Refer to ComponentDataBlitOp for optimized data blitting:
- ComponentDataBlitOp.INSTANCE.filter(src, dest);
- else
- {
- // slower path
- int samples[] = src.getPixels (x, y, w, h, (int [])null);
- dest.setPixels (x, y, w, h, samples);
- }
- }
-
- public void setRGB(int x, int y, int argb)
- {
- Object rgbElem = colorModel.getDataElements(argb, null);
- raster.setDataElements(x, y, rgbElem);
- }
-
- public void setRGB(int startX, int startY, int w, int h,
- int[] argbArray, int offset, int scanlineStride)
- {
- int endX = startX + w;
- int endY = startY + h;
-
- Object rgbElem = null;
- for (int y=startY; y<endY; y++)
- {
- int xoffset = offset;
- for (int x=startX; x<endX; x++)
- {
- int argb = argbArray[xoffset++];
- rgbElem = colorModel.getDataElements(argb, rgbElem);
- raster.setDataElements(x, y, rgbElem);
- }
- offset += scanlineStride;
- }
- }
-
- public String toString()
- {
- CPStringBuilder buf;
-
- buf = new CPStringBuilder(/* estimated length */ 120);
- buf.append("BufferedImage@");
- buf.append(Integer.toHexString(hashCode()));
- buf.append(": type=");
- buf.append(type);
- buf.append(' ');
- buf.append(colorModel);
- buf.append(' ');
- buf.append(raster);
-
- return buf.toString();
- }
-
-
- /**
- * Adds a tile observer. If the observer is already present, it receives
- * multiple notifications.
- *
- * @param to The TileObserver to add.
- */
- public void addTileObserver (TileObserver to)
- {
- if (tileObservers == null)
- tileObservers = new Vector<TileObserver>();
-
- tileObservers.add (to);
- }
-
- /**
- * Removes a tile observer. If the observer was not registered,
- * nothing happens. If the observer was registered for multiple
- * notifications, it is now registered for one fewer notification.
- *
- * @param to The TileObserver to remove.
- */
- public void removeTileObserver (TileObserver to)
- {
- if (tileObservers == null)
- return;
-
- tileObservers.remove (to);
- }
-
- /**
- * Return the transparency type.
- *
- * @return One of {@link #OPAQUE}, {@link #BITMASK}, or {@link #TRANSLUCENT}.
- * @see Transparency#getTransparency()
- * @since 1.5
- */
- public int getTransparency()
- {
- return colorModel.getTransparency();
- }
-}
diff --git a/libjava/classpath/java/awt/image/BufferedImageFilter.java b/libjava/classpath/java/awt/image/BufferedImageFilter.java
deleted file mode 100644
index 04b6672..0000000
--- a/libjava/classpath/java/awt/image/BufferedImageFilter.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/* Copyright (C) 2004 Free Software Foundation
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package java.awt.image;
-
-import java.awt.Point;
-
-/**
- * The BufferedImageFilter class wraps BufferedImageOp objects in a Filter.
- *
- * When pixels are pushed through the filter, we create a BufferedImage,
- * apply the BufferedImageOp, and pass the filtered pixels to the base class.
- *
- * @author jlquinn@optonline.net
- */
-public class BufferedImageFilter extends ImageFilter implements Cloneable
-{
- private BufferedImageOp op;
-
- /**
- *
- */
- public BufferedImageFilter(BufferedImageOp op)
- {
- super();
- if (op == null)
- throw new NullPointerException("BufferedImageFilter null"
- + " op in constructor");
- this.op = op;
- }
-
- /**
- * @return Returns the contained BufferedImageOp.
- */
- public BufferedImageOp getBufferedImageOp()
- {
- return op;
- }
-
- // FIXME: Definitely not sure this is the right thing. I'm not sure how to
- // create a compatible sample model that incorporates scansize != w. I
- // asume off is handled by the db itself.
- public void setPixels(int x, int y, int w, int h, ColorModel model,
- byte[] pixels, int off, int scansize)
- {
- // Create an input BufferedImage
- DataBufferByte db = new DataBufferByte(pixels, scansize * h + off, off);
- SampleModel sm = model.createCompatibleSampleModel(scansize, h);
- WritableRaster wr = new WritableRaster(sm, db, new Point(0, 0));
- BufferedImage in =
- new BufferedImage(model, wr, model.isAlphaPremultiplied(), null);
- BufferedImage out = op.createCompatibleDestImage(in, model);
- op.filter(in, out);
- DataBuffer dbout = out.getRaster().getDataBuffer();
- super.setPixels(0, 0, w, h, model, ((DataBufferByte)dbout).getData(), 0,
- scansize);
- }
-
- // FIXME: Definitely not sure this is the right thing. I'm not sure how
- // to create a compatible sample model that incorporates
- // scansize != w. I asume off is handled by the db itself.
- public void setPixels(int x, int y, int w, int h, ColorModel model,
- int[] pixels, int off, int scansize)
- {
- // Create an input BufferedImage
- DataBufferInt db = new DataBufferInt(pixels, scansize * h + off, off);
- SampleModel sm = model.createCompatibleSampleModel(scansize, h);
- WritableRaster wr = new WritableRaster(sm, db, new Point(0, 0));
- BufferedImage in =
- new BufferedImage(model, wr, model.isAlphaPremultiplied(), null);
- BufferedImage out = op.createCompatibleDestImage(in, model);
- op.filter(in, out);
- DataBuffer dbout = out.getRaster().getDataBuffer();
- super.setPixels(0, 0, w, h, model, ((DataBufferInt)dbout).getData(), 0,
- scansize);
- }
-}
diff --git a/libjava/classpath/java/awt/image/BufferedImageOp.java b/libjava/classpath/java/awt/image/BufferedImageOp.java
deleted file mode 100644
index 1aba4bb..0000000
--- a/libjava/classpath/java/awt/image/BufferedImageOp.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/* BufferedImageOp.java --
- Copyright (C) 2002, 2006, Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-import java.awt.RenderingHints;
-import java.awt.geom.Point2D;
-import java.awt.geom.Rectangle2D;
-
-/**
- * An operation that is performed on one <code>BufferedImage</code> (the
- * source) producing a new <code>BufferedImage</code> (the destination).
- */
-public interface BufferedImageOp
-{
- /**
- * Performs an operation on the source image, returning the result in a
- * <code>BufferedImage</code>. If <code>dest</code> is <code>null</code>, a
- * new <code>BufferedImage</code> will be created by calling the
- * {@link #createCompatibleDestImage} method. If <code>dest</code>
- * is not <code>null</code>, the result is written to <code>dest</code> then
- * returned (this avoids creating a new <code>BufferedImage</code> each
- * time this method is called).
- *
- * @param src the source image.
- * @param dst the destination image (<code>null</code> permitted).
- *
- * @return The filterd image.
- */
- BufferedImage filter(BufferedImage src, BufferedImage dst);
-
- /**
- * Returns the bounds of the destination image on the basis of this
- * <code>BufferedImageOp</code> being applied to the specified source image.
- *
- * @param src the source image.
- *
- * @return The destination bounds.
- */
- Rectangle2D getBounds2D(BufferedImage src);
-
- /**
- * Returns a new <code>BufferedImage</code> that can be used by this
- * <code>BufferedImageOp</code> as the destination image when filtering
- * the specified source image.
- *
- * @param src the source image.
- * @param dstCM the color model for the destination image.
- *
- * @return A new image that can be used as the destination image.
- */
- BufferedImage createCompatibleDestImage(BufferedImage src, ColorModel dstCM);
-
- /**
- * Returns the point on the destination image that corresponds to the given
- * point on the source image.
- *
- * @param src the source point.
- * @param dst the destination point (<code>null</code> permitted).
- *
- * @return The destination point.
- */
- Point2D getPoint2D(Point2D src, Point2D dst);
-
- /**
- * Returns the rendering hints for this operation.
- *
- * @return The rendering hints.
- */
- RenderingHints getRenderingHints();
-
-}
diff --git a/libjava/classpath/java/awt/image/ByteLookupTable.java b/libjava/classpath/java/awt/image/ByteLookupTable.java
deleted file mode 100644
index 89804c5..0000000
--- a/libjava/classpath/java/awt/image/ByteLookupTable.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/* ByteLookupTable.java -- Java class for a pixel translation table.
- Copyright (C) 2004, 2005, 2006, Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-/**
- * ByteLookupTable represents translation arrays for pixel values. It wraps
- * one or more data arrays for each layer (or component) in an image, such as
- * Alpha, R, G, and B. When doing translation, the offset is subtracted from
- * the pixel values to allow a subset of an array to be used.
- *
- * @author Jerry Quinn (jlquinn@optonline.net)
- * @version 1.0
- */
-public class ByteLookupTable extends LookupTable
-{
- // Array of translation tables.
- private byte data[][];
-
- /**
- * Creates a new <code>ByteLookupTable</code> instance.
- *
- * Offset is subtracted from pixel values when looking up in the translation
- * tables. If data.length is one, the same table is applied to all pixel
- * components.
- *
- * @param offset Offset to be subtracted.
- * @param data Array of lookup tables (<code>null</code> not permitted).
- * @exception IllegalArgumentException if offset &lt; 0 or data.length &lt; 1.
- */
- public ByteLookupTable(int offset, byte[][] data)
- throws IllegalArgumentException
- {
- super(offset, data.length);
-
- // tests show that Sun's implementation creates a new array to store the
- // references from the incoming 'data' array - not sure why, but we'll
- // match that behaviour just in case it matters...
- this.data = new byte[data.length][];
- for (int i = 0; i < data.length; i++)
- this.data[i] = data[i];
- }
-
- /**
- * Creates a new <code>ByteLookupTable</code> instance.
- *
- * Offset is subtracted from pixel values when looking up in the translation
- * table. The same table is applied to all pixel components.
- *
- * @param offset Offset to be subtracted.
- * @param data Lookup table for all components (<code>null</code> not
- * permitted).
- * @exception IllegalArgumentException if offset &lt; 0.
- */
- public ByteLookupTable(int offset, byte[] data)
- throws IllegalArgumentException
- {
- super(offset, 1);
- if (data == null)
- throw new NullPointerException("Null 'data' argument.");
- this.data = new byte[][] {data};
- }
-
- /**
- * Return the lookup tables.
- *
- * @return the tables
- */
- public final byte[][] getTable()
- {
- return data;
- }
-
- /**
- * Return translated values for a pixel.
- *
- * For each value in the pixel src, use the value minus offset as an index
- * in the component array and copy the value there to the output for the
- * component. If dest is null, the output is a new array, otherwise the
- * translated values are written to dest. Dest can be the same array as
- * src.
- *
- * For example, if the pixel src is [2, 4, 3], and offset is 1, the output
- * is [comp1[1], comp2[3], comp3[2]], where comp1, comp2, and comp3 are the
- * translation arrays.
- *
- * @param src Component values of a pixel.
- * @param dst Destination array for values, or null.
- * @return Translated values for the pixel.
- */
- public int[] lookupPixel(int[] src, int[] dst)
- throws ArrayIndexOutOfBoundsException
- {
- if (dst == null)
- dst = new int[src.length];
-
- if (data.length == 1)
- for (int i=0; i < src.length; i++)
- dst[i] = data[0][src[i] - offset];
- else
- for (int i=0; i < src.length; i++)
- dst[i] = data[i][src[i] - offset];
-
- return dst;
- }
-
- /**
- * Return translated values for a pixel.
- *
- * For each value in the pixel src, use the value minus offset as an index
- * in the component array and copy the value there to the output for the
- * component. If dest is null, the output is a new array, otherwise the
- * translated values are written to dest. Dest can be the same array as
- * src.
- *
- * For example, if the pixel src is [2, 4, 3], and offset is 1, the output
- * is [comp1[1], comp2[3], comp3[2]], where comp1, comp2, and comp3 are the
- * translation arrays.
- *
- * @param src Component values of a pixel.
- * @param dst Destination array for values, or null.
- * @return Translated values for the pixel.
- */
- public byte[] lookupPixel(byte[] src, byte[] dst)
- throws ArrayIndexOutOfBoundsException
- {
- if (dst == null)
- dst = new byte[src.length];
-
- if (data.length == 1)
- for (int i=0; i < src.length; i++)
- dst[i] = data[0][((int)src[i]) - offset];
- else
- for (int i=0; i < src.length; i++)
- dst[i] = data[i][((int)src[i]) - offset];
-
- return dst;
-
- }
-}
diff --git a/libjava/classpath/java/awt/image/ColorConvertOp.java b/libjava/classpath/java/awt/image/ColorConvertOp.java
deleted file mode 100644
index b1d6f85..0000000
--- a/libjava/classpath/java/awt/image/ColorConvertOp.java
+++ /dev/null
@@ -1,537 +0,0 @@
-/* ColorConvertOp.java --
- Copyright (C) 2004, 2006 Free Software Foundation
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-import gnu.java.awt.Buffers;
-
-import java.awt.Graphics2D;
-import java.awt.Point;
-import java.awt.RenderingHints;
-import java.awt.color.ColorSpace;
-import java.awt.color.ICC_ColorSpace;
-import java.awt.color.ICC_Profile;
-import java.awt.geom.Point2D;
-import java.awt.geom.Rectangle2D;
-
-/**
- * ColorConvertOp is a filter for converting images or rasters between
- * colorspaces, either through a sequence of colorspaces or just from source to
- * destination.
- *
- * Color conversion is done on the color components without alpha. Thus
- * if a BufferedImage has alpha premultiplied, this is divided out before
- * color conversion, and premultiplication applied if the destination
- * requires it.
- *
- * Color rendering and dithering hints may be applied if specified. This is
- * likely platform-dependent.
- *
- * @author jlquinn@optonline.net
- */
-public class ColorConvertOp implements BufferedImageOp, RasterOp
-{
- private RenderingHints hints;
- private ICC_Profile[] profiles = null;
- private ColorSpace[] spaces;
-
-
- /**
- * Convert a BufferedImage through a ColorSpace.
- *
- * Objects created with this constructor can be used to convert
- * BufferedImage's to a destination ColorSpace. Attempts to convert Rasters
- * with this constructor will result in an IllegalArgumentException when the
- * filter(Raster, WritableRaster) method is called.
- *
- * @param cspace The target color space.
- * @param hints Rendering hints to use in conversion, if any (may be null)
- * @throws NullPointerException if the ColorSpace is null.
- */
- public ColorConvertOp(ColorSpace cspace, RenderingHints hints)
- {
- if (cspace == null)
- throw new NullPointerException();
- spaces = new ColorSpace[]{cspace};
- this.hints = hints;
- }
-
- /**
- * Convert from a source colorspace to a destination colorspace.
- *
- * This constructor takes two ColorSpace arguments as the source and
- * destination color spaces. It is usually used with the
- * filter(Raster, WritableRaster) method, in which case the source colorspace
- * is assumed to correspond to the source Raster, and the destination
- * colorspace with the destination Raster.
- *
- * If used with BufferedImages that do not match the source or destination
- * colorspaces specified here, there is an implicit conversion from the
- * source image to the source ColorSpace, or the destination ColorSpace to
- * the destination image.
- *
- * @param srcCspace The source ColorSpace.
- * @param dstCspace The destination ColorSpace.
- * @param hints Rendering hints to use in conversion, if any (may be null).
- * @throws NullPointerException if any ColorSpace is null.
- */
- public ColorConvertOp(ColorSpace srcCspace, ColorSpace dstCspace,
- RenderingHints hints)
- {
- if (srcCspace == null || dstCspace == null)
- throw new NullPointerException();
- spaces = new ColorSpace[]{srcCspace, dstCspace};
- this.hints = hints;
- }
-
- /**
- * Convert from a source colorspace to a destinatino colorspace.
- *
- * This constructor builds a ColorConvertOp from an array of ICC_Profiles.
- * The source will be converted through the sequence of color spaces
- * defined by the profiles. If the sequence of profiles doesn't give a
- * well-defined conversion, an IllegalArgumentException is thrown.
- *
- * If used with BufferedImages that do not match the source or destination
- * colorspaces specified here, there is an implicit conversion from the
- * source image to the source ColorSpace, or the destination ColorSpace to
- * the destination image.
- *
- * For Rasters, the first and last profiles must have the same number of
- * bands as the source and destination Rasters, respectively. If this is
- * not the case, or there fewer than 2 profiles, an IllegalArgumentException
- * will be thrown.
- *
- * @param profiles An array of ICC_Profile's to convert through.
- * @param hints Rendering hints to use in conversion, if any (may be null).
- * @throws NullPointerException if the profile array is null.
- * @throws IllegalArgumentException if the array is not a well-defined
- * conversion.
- */
- public ColorConvertOp(ICC_Profile[] profiles, RenderingHints hints)
- {
- if (profiles == null)
- throw new NullPointerException();
-
- this.hints = hints;
- this.profiles = profiles;
-
- // Create colorspace array with space for src and dest colorspace
- // Note that the ICC_ColorSpace constructor will throw an
- // IllegalArgumentException if the profile is invalid; thus we check
- // for a "well defined conversion"
- spaces = new ColorSpace[profiles.length];
- for (int i = 0; i < profiles.length; i++)
- spaces[i] = new ICC_ColorSpace(profiles[i]);
- }
-
- /**
- * Convert from source color space to destination color space.
- *
- * Only valid for BufferedImage objects, this Op converts from the source
- * image's color space to the destination image's color space.
- *
- * The destination in the filter(BufferedImage, BufferedImage) method cannot
- * be null for this operation, and it also cannot be used with the
- * filter(Raster, WritableRaster) method.
- *
- * @param hints Rendering hints to use in conversion, if any (may be null).
- */
- public ColorConvertOp(RenderingHints hints)
- {
- this.hints = hints;
- spaces = new ColorSpace[0];
- }
-
- /**
- * Converts the source image using the conversion path specified in the
- * constructor. The resulting image is stored in the destination image if one
- * is provided; otherwise a new BufferedImage is created and returned.
- *
- * The source and destination BufferedImage (if one is supplied) must have
- * the same dimensions.
- *
- * @param src The source image.
- * @param dst The destination image.
- * @throws IllegalArgumentException if the rasters and/or color spaces are
- * incompatible.
- * @return The transformed image.
- */
- public final BufferedImage filter(BufferedImage src, BufferedImage dst)
- {
- // TODO: The plan is to create a scanline buffer for intermediate buffers.
- // For now we just suck it up and create intermediate buffers.
-
- if (dst == null && spaces.length == 0)
- throw new IllegalArgumentException("Not enough color space information "
- + "to complete conversion.");
-
- if (dst != null
- && (src.getHeight() != dst.getHeight() || src.getWidth() != dst.getWidth()))
- throw new IllegalArgumentException("Source and destination images have "
- + "different dimensions");
-
- // Make sure input isn't premultiplied by alpha
- if (src.isAlphaPremultiplied())
- {
- BufferedImage tmp = createCompatibleDestImage(src, src.getColorModel());
- copyimage(src, tmp);
- tmp.coerceData(false);
- src = tmp;
- }
-
- // Convert through defined intermediate conversions
- BufferedImage tmp;
- for (int i = 0; i < spaces.length; i++)
- {
- if (src.getColorModel().getColorSpace().getType() != spaces[i].getType())
- {
- tmp = createCompatibleDestImage(src,
- createCompatibleColorModel(src,
- spaces[i]));
- copyimage(src, tmp);
- src = tmp;
- }
- }
-
- // No implicit conversion to destination type needed; return result from the
- // last intermediate conversions (which was left in src)
- if (dst == null)
- dst = src;
-
- // Implicit conversion to destination image's color space
- else
- copyimage(src, dst);
-
- return dst;
- }
-
- /**
- * Converts the source raster using the conversion path specified in the
- * constructor. The resulting raster is stored in the destination raster if
- * one is provided; otherwise a new WritableRaster is created and returned.
- *
- * This operation is not valid with every constructor of this class; see
- * the constructors for details. Further, the source raster must have the
- * same number of bands as the source ColorSpace, and the destination raster
- * must have the same number of bands as the destination ColorSpace.
- *
- * The source and destination raster (if one is supplied) must also have the
- * same dimensions.
- *
- * @param src The source raster.
- * @param dest The destination raster.
- * @throws IllegalArgumentException if the rasters and/or color spaces are
- * incompatible.
- * @return The transformed raster.
- */
- public final WritableRaster filter(Raster src, WritableRaster dest)
- {
- // Various checks to ensure that the rasters and color spaces are compatible
- if (spaces.length < 2)
- throw new IllegalArgumentException("Not enough information about " +
- "source and destination colorspaces.");
-
- if (spaces[0].getNumComponents() != src.getNumBands()
- || (dest != null && spaces[spaces.length - 1].getNumComponents() != dest.getNumBands()))
- throw new IllegalArgumentException("Source or destination raster " +
- "contains the wrong number of bands.");
-
- if (dest != null
- && (src.getHeight() != dest.getHeight() || src.getWidth() != dest.getWidth()))
- throw new IllegalArgumentException("Source and destination rasters " +
- "have different dimensions");
-
- // Need to iterate through each color space.
- // spaces[0] corresponds to the ColorSpace of the source raster, and
- // spaces[spaces.length - 1] corresponds to the ColorSpace of the
- // destination, with any number (or zero) of intermediate conversions.
-
- for (int i = 0; i < spaces.length - 2; i++)
- {
- WritableRaster tmp = createCompatibleDestRaster(src, spaces[i + 1],
- false,
- src.getTransferType());
- copyraster(src, spaces[i], tmp, spaces[i + 1]);
- src = tmp;
- }
-
- // The last conversion is done outside of the loop so that we can
- // use the dest raster supplied, instead of creating our own temp raster
- if (dest == null)
- dest = createCompatibleDestRaster(src, spaces[spaces.length - 1], false,
- DataBuffer.TYPE_BYTE);
- copyraster(src, spaces[spaces.length - 2], dest, spaces[spaces.length - 1]);
-
- return dest;
- }
-
- /**
- * Creates an empty BufferedImage with the size equal to the source and the
- * correct number of bands for the conversion defined in this Op. The newly
- * created image is created with the specified ColorModel, or if no ColorModel
- * is supplied, an appropriate one is chosen.
- *
- * @param src The source image.
- * @param dstCM A color model for the destination image (may be null).
- * @throws IllegalArgumentException if an appropriate colormodel cannot be
- * chosen with the information given.
- * @return The new compatible destination image.
- */
- public BufferedImage createCompatibleDestImage(BufferedImage src,
- ColorModel dstCM)
- {
- if (dstCM == null && spaces.length == 0)
- throw new IllegalArgumentException("Don't know the destination " +
- "colormodel");
-
- if (dstCM == null)
- {
- dstCM = createCompatibleColorModel(src, spaces[spaces.length - 1]);
- }
-
- return new BufferedImage(dstCM,
- createCompatibleDestRaster(src.getRaster(),
- dstCM.getColorSpace(),
- src.getColorModel().hasAlpha,
- dstCM.getTransferType()),
- src.isPremultiplied, null);
- }
-
- /**
- * Creates a new WritableRaster with the size equal to the source and the
- * correct number of bands.
- *
- * Note, the new Raster will always use a BYTE storage size, regardless of
- * the color model or defined destination; this is for compatibility with
- * the reference implementation.
- *
- * @param src The source Raster.
- * @throws IllegalArgumentException if there isn't enough colorspace
- * information to create a compatible Raster.
- * @return The new compatible destination raster.
- */
- public WritableRaster createCompatibleDestRaster(Raster src)
- {
- if (spaces.length < 2)
- throw new IllegalArgumentException("Not enough destination colorspace " +
- "information");
-
- // Create a new raster with the last ColorSpace in the conversion
- // chain, and with no alpha (implied)
- return createCompatibleDestRaster(src, spaces[spaces.length-1], false,
- DataBuffer.TYPE_BYTE);
- }
-
- /**
- * Returns the array of ICC_Profiles used to create this Op, or null if the
- * Op was created using ColorSpace arguments.
- *
- * @return The array of ICC_Profiles, or null.
- */
- public final ICC_Profile[] getICC_Profiles()
- {
- return profiles;
- }
-
- /**
- * Returns the rendering hints for this op.
- *
- * @return The rendering hints for this Op, or null.
- */
- public final RenderingHints getRenderingHints()
- {
- return hints;
- }
-
- /**
- * Returns the corresponding destination point for a source point.
- * Because this is not a geometric operation, the destination and source
- * points will be identical.
- *
- * @param src The source point.
- * @param dst The transformed destination point.
- * @return The transformed destination point.
- */
- public final Point2D getPoint2D(Point2D src, Point2D dst)
- {
- if (dst == null)
- return (Point2D)src.clone();
-
- dst.setLocation(src);
- return dst;
- }
-
- /**
- * Returns the corresponding destination boundary of a source boundary.
- * Because this is not a geometric operation, the destination and source
- * boundaries will be identical.
- *
- * @param src The source boundary.
- * @return The boundaries of the destination.
- */
- public final Rectangle2D getBounds2D(BufferedImage src)
- {
- return src.getRaster().getBounds();
- }
-
- /**
- * Returns the corresponding destination boundary of a source boundary.
- * Because this is not a geometric operation, the destination and source
- * boundaries will be identical.
- *
- * @param src The source boundary.
- * @return The boundaries of the destination.
- */
- public final Rectangle2D getBounds2D(Raster src)
- {
- return src.getBounds();
- }
-
- /**
- * Copy a source image to a destination image, respecting their colorspaces
- * and performing colorspace conversions if necessary.
- *
- * @param src The source image.
- * @param dst The destination image.
- */
- private void copyimage(BufferedImage src, BufferedImage dst)
- {
- // This is done using Graphics2D in order to respect the rendering hints.
- Graphics2D gg = dst.createGraphics();
-
- // If no hints are set there is no need to call
- // setRenderingHints on the Graphics2D object.
- if (hints != null)
- gg.setRenderingHints(hints);
-
- gg.drawImage(src, 0, 0, null);
- gg.dispose();
- }
-
- /**
- * Copy a source raster to a destination raster, performing a colorspace
- * conversion between the two. The conversion will respect the
- * KEY_COLOR_RENDERING rendering hint if one is present.
- *
- * @param src The source raster.
- * @param scs The colorspace of the source raster.
- * @dst The destination raster.
- * @dcs The colorspace of the destination raster.
- */
- private void copyraster(Raster src, ColorSpace scs, WritableRaster dst, ColorSpace dcs)
- {
- float[] sbuf = new float[src.getNumBands()];
-
- if (hints != null
- && hints.get(RenderingHints.KEY_COLOR_RENDERING) ==
- RenderingHints.VALUE_COLOR_RENDER_QUALITY)
- {
- // use cie for accuracy
- for (int y = src.getMinY(); y < src.getHeight() + src.getMinY(); y++)
- for (int x = src.getMinX(); x < src.getWidth() + src.getMinX(); x++)
- dst.setPixel(x, y,
- dcs.fromCIEXYZ(scs.toCIEXYZ(src.getPixel(x, y, sbuf))));
- }
- else
- {
- // use rgb - it's probably faster
- for (int y = src.getMinY(); y < src.getHeight() + src.getMinY(); y++)
- for (int x = src.getMinX(); x < src.getWidth() + src.getMinX(); x++)
- dst.setPixel(x, y,
- dcs.fromRGB(scs.toRGB(src.getPixel(x, y, sbuf))));
- }
- }
-
- /**
- * This method creates a color model with the same colorspace and alpha
- * settings as the source image. The created color model will always be a
- * ComponentColorModel and have a BYTE transfer type.
- *
- * @param img The source image.
- * @param cs The ColorSpace to use.
- * @return A color model compatible with the source image.
- */
- private ColorModel createCompatibleColorModel(BufferedImage img, ColorSpace cs)
- {
- // The choice of ComponentColorModel and DataBuffer.TYPE_BYTE is based on
- // Mauve testing of the reference implementation.
- return new ComponentColorModel(cs,
- img.getColorModel().hasAlpha(),
- img.isAlphaPremultiplied(),
- img.getColorModel().getTransparency(),
- DataBuffer.TYPE_BYTE);
- }
-
- /**
- * This method creates a compatible Raster, given a source raster, colorspace,
- * alpha value, and transfer type.
- *
- * @param src The source raster.
- * @param cs The ColorSpace to use.
- * @param hasAlpha Whether the raster should include a component for an alpha.
- * @param transferType The size of a single data element.
- * @return A compatible WritableRaster.
- */
- private WritableRaster createCompatibleDestRaster(Raster src, ColorSpace cs,
- boolean hasAlpha,
- int transferType)
- {
- // The use of a PixelInterleavedSampleModel weas determined using mauve
- // tests, based on the reference implementation
-
- int numComponents = cs.getNumComponents();
- if (hasAlpha)
- numComponents++;
-
- int[] offsets = new int[numComponents];
- for (int i = 0; i < offsets.length; i++)
- offsets[i] = i;
-
- DataBuffer db = Buffers.createBuffer(transferType,
- src.getWidth() * src.getHeight() * numComponents,
- 1);
- return new WritableRaster(new PixelInterleavedSampleModel(transferType,
- src.getWidth(),
- src.getHeight(),
- numComponents,
- numComponents * src.getWidth(),
- offsets),
- db, new Point(src.getMinX(), src.getMinY()));
- }
-}
diff --git a/libjava/classpath/java/awt/image/ColorModel.java b/libjava/classpath/java/awt/image/ColorModel.java
deleted file mode 100644
index ede9e31..0000000
--- a/libjava/classpath/java/awt/image/ColorModel.java
+++ /dev/null
@@ -1,794 +0,0 @@
-/* ColorModel.java --
- Copyright (C) 1999, 2000, 2002, 2003, 2004, 2006 Free Software Foundation
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-import gnu.java.awt.Buffers;
-
-import java.awt.Point;
-import java.awt.Transparency;
-import java.awt.color.ColorSpace;
-import java.util.Arrays;
-
-/**
- * A color model operates with colors in several formats:
- *
- * <ul>
- * <li>normalized: component samples are in range [0.0, 1.0].</li>
- *
- * <li>color model pixel value: all the color component samples for a
- * sigle pixel packed/encoded in a way natural for the color
- * model.</li>
- *
- * <li>color model pixel int value: only makes sense if the natural
- * encoding of a single pixel can fit in a single int value.</li>
- *
- * <li>array of transferType containing a single pixel: the pixel is
- * encoded in the natural way of the color model, taking up as many
- * array elements as needed.</li>
- *
- * <li>sRGB pixel int value: a pixel in sRGB color space, encoded in
- * default 0xAARRGGBB format, assumed not alpha premultiplied.</li>
- *
- * <li>single [0, 255] scaled int samples from default sRGB color
- * space. These are always assumed to be alpha non-premultiplied.</li>
- *
- * <li>arrays of unnormalized component samples of single pixel: these
- * samples are scaled and multiplied according to the color model, but
- * is otherwise not packed or encoded. Each element of the array is one
- * separate component sample. The color model only operate on the
- * components from one pixel at a time, but using offsets, allows
- * manipulation of arrays that contain the components of more than one
- * pixel.</li>
- *
- * </ul>
- *
- * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
- * @author C. Brian Jones (cbj@gnu.org)
- */
-public abstract class ColorModel implements Transparency
-{
- protected int pixel_bits;
- protected int transferType;
-
- int[] bits;
- ColorSpace cspace;
- int transparency;
- boolean hasAlpha;
- boolean isAlphaPremultiplied;
-
- /**
- * The standard color model for the common sRGB.
- */
- private static final ColorModel S_RGB_MODEL = new SRGBColorModel();
-
- static int[] nArray(int value, int times)
- {
- int[] array = new int[times];
- java.util.Arrays.fill(array, value);
- return array;
- }
-
- static byte[] nArray(byte value, int times)
- {
- byte[] array = new byte[times];
- java.util.Arrays.fill(array, value);
- return array;
- }
-
- /**
- * Constructs the default color model. The default color model
- * can be obtained by calling <code>getRGBdefault</code> of this
- * class.
- * @param bits the number of bits wide used for bit size of pixel values
- */
- public ColorModel(int bits)
- {
- this(bits * 4, // total bits, sRGB, four channels
- nArray(bits, 4), // bits for each channel
- ColorSpace.getInstance(ColorSpace.CS_sRGB), // sRGB
- true, // has alpha
- false, // not premultiplied
- TRANSLUCENT,
- Buffers.smallestAppropriateTransferType(bits * 4));
- }
-
- /**
- * Constructs a ColorModel that translates pixel values to
- * color/alpha components.
- *
- * @exception IllegalArgumentException If the length of the bit array is less
- * than the number of color or alpha components in this ColorModel, or if the
- * transparency is not a valid value, or if the sum of the number of bits in
- * bits is less than 1 or if any of the elements in bits is less than 0.
- */
- protected ColorModel(int pixel_bits, int[] bits, ColorSpace cspace,
- boolean hasAlpha, boolean isAlphaPremultiplied,
- int transparency, int transferType)
- {
- int bits_sum = 0;
- for (int i = 0; i < bits.length; i++)
- {
- if (bits [i] < 0)
- throw new IllegalArgumentException ();
-
- bits_sum |= bits [i];
- }
-
- if ((bits.length < cspace.getNumComponents())
- || (bits_sum < 1))
- throw new IllegalArgumentException ();
-
- this.pixel_bits = pixel_bits;
- this.bits = bits;
- this.cspace = cspace;
- this.hasAlpha = hasAlpha;
- this.isAlphaPremultiplied = isAlphaPremultiplied;
- this.transparency = transparency;
- this.transferType = transferType;
- }
-
- public void finalize()
- {
- // Do nothing here.
- }
-
- /**
- * Returns the default color model which in Sun's case is an instance
- * of <code>DirectColorModel</code>.
- */
- public static ColorModel getRGBdefault()
- {
- return S_RGB_MODEL;
- }
-
- public final boolean hasAlpha()
- {
- return hasAlpha;
- }
-
- public final boolean isAlphaPremultiplied()
- {
- return isAlphaPremultiplied;
- }
-
- /**
- * Get get number of bits wide used for the bit size of pixel values
- */
- public int getPixelSize()
- {
- return pixel_bits;
- }
-
- public int getComponentSize(int componentIdx)
- {
- return bits[componentIdx];
- }
-
- public int[] getComponentSize()
- {
- return bits;
- }
-
- public int getTransparency()
- {
- return transparency;
- }
-
- public int getNumComponents()
- {
- return getNumColorComponents() + (hasAlpha ? 1 : 0);
- }
-
- public int getNumColorComponents()
- {
- return cspace.getNumComponents();
- }
-
- /**
- * Converts pixel value to sRGB and extract red int sample scaled
- * to range [0, 255].
- *
- * @param pixel pixel value that will be interpreted according to
- * the color model, (assumed alpha premultiplied if color model says
- * so.)
- *
- * @return red sample scaled to range [0, 255], from default color
- * space sRGB, alpha non-premultiplied.
- */
- public abstract int getRed(int pixel);
-
- /**
- * Converts pixel value to sRGB and extract green int sample
- * scaled to range [0, 255].
- *
- * @see #getRed(int)
- */
- public abstract int getGreen(int pixel);
-
- /**
- * Converts pixel value to sRGB and extract blue int sample
- * scaled to range [0, 255].
- *
- * @see #getRed(int)
- */
- public abstract int getBlue(int pixel);
-
- /**
- * Extract alpha int sample from pixel value, scaled to [0, 255].
- *
- * @param pixel pixel value that will be interpreted according to
- * the color model.
- *
- * @return alpha sample, scaled to range [0, 255].
- */
- public abstract int getAlpha(int pixel);
-
- /**
- * Converts a pixel int value of the color space of the color
- * model to a sRGB pixel int value.
- *
- * This method is typically overriden in subclasses to provide a
- * more efficient implementation.
- *
- * @param pixel pixel value that will be interpreted according to
- * the color model.
- *
- * @return a pixel in sRGB color space, encoded in default
- * 0xAARRGGBB format. */
- public int getRGB(int pixel)
- {
- return
- ((getAlpha(pixel) & 0xff) << 24) |
- (( getRed(pixel) & 0xff) << 16) |
- ((getGreen(pixel) & 0xff) << 8) |
- (( getBlue(pixel) & 0xff) << 0);
- }
-
-
- /**
- * In this color model we know that the whole pixel value will
- * always be contained within the first element of the pixel
- * array.
- */
- final int getPixelFromArray(Object inData) {
- DataBuffer data =
- Buffers.createBufferFromData(transferType, inData, 1);
- Object da = Buffers.getData(data);
-
- return data.getElem(0);
- }
-
- /**
- * Converts pixel in the given array to sRGB and extract blue int
- * sample scaled to range [0-255].
- *
- * This method is typically overriden in subclasses to provide a
- * more efficient implementation.
- *
- * @param inData array of transferType containing a single pixel. The
- * pixel should be encoded in the natural way of the color model.
- */
- public int getRed(Object inData)
- {
- return getRed(getPixelFromArray(inData));
- }
-
- /**
- * @see #getRed(Object)
- */
- public int getGreen(Object inData)
- {
- return getGreen(getPixelFromArray(inData));
- }
-
- /**
- * @see #getRed(Object)
- */
- public int getBlue(Object inData) {
- return getBlue(getPixelFromArray(inData));
- }
-
- /**
- * @see #getRed(Object)
- */
- public int getAlpha(Object inData) {
- return getAlpha(getPixelFromArray(inData));
- }
-
- /**
- * Converts a pixel in the given array of the color space of the
- * color model to an sRGB pixel int value.
- *
- * <p>This method performs the inverse function of
- * <code>getDataElements(int rgb, Object pixel)</code>.
- * I.e. <code>(rgb == cm.getRGB(cm.getDataElements(rgb,
- * null)))</code>.
- *
- * @param inData array of transferType containing a single pixel. The
- * pixel should be encoded in the natural way of the color model.
- *
- * @return a pixel in sRGB color space, encoded in default
- * 0xAARRGGBB format.
- *
- * @see #getDataElements(int, Object)
- */
- public int getRGB(Object inData)
- {
- return
- ((getAlpha(inData) & 0xff) << 24) |
- (( getRed(inData) & 0xff) << 16) |
- ((getGreen(inData) & 0xff) << 8) |
- (( getBlue(inData) & 0xff) << 0);
- }
-
- /**
- * Converts an sRGB pixel int value to an array containing a
- * single pixel of the color space of the color model.
- *
- * <p>This method performs the inverse function of
- * <code>getRGB(Object inData)</code>.
- *
- * Outline of conversion process:
- *
- * <ol>
- *
- * <li>Convert rgb to normalized [0.0, 1.0] sRGB values.</li>
- *
- * <li>Convert to color space components using fromRGB in
- * ColorSpace.</li>
- *
- * <li>If color model has alpha and should be premultiplied,
- * multiply color space components with alpha value</li>
- *
- * <li>Scale the components to the correct number of bits.</li>
- *
- * <li>Arrange the components in the output array</li>
- *
- * </ol>
- *
- * @param rgb The color to be converted to dataElements. A pixel
- * in sRGB color space, encoded in default 0xAARRGGBB format,
- * assumed not alpha premultiplied.
- *
- * @param pixel to avoid needless creation of arrays, an array to
- * use to return the pixel can be given. If null, a suitable array
- * will be created.
- *
- * @return An array of transferType values representing the color,
- * in the color model format. The color model defines whether the
- *
- * @see #getRGB(Object)
- */
- public Object getDataElements(int rgb, Object pixel)
- {
- // subclasses has to implement this method.
- throw new UnsupportedOperationException();
- }
-
- /**
- * Fills an array with the unnormalized component samples from a
- * pixel value. I.e. decompose the pixel, but not perform any
- * color conversion.
- *
- * This method is typically overriden in subclasses to provide a
- * more efficient implementation.
- *
- * @param pixel pixel value encoded according to the color model.
- *
- * @return arrays of unnormalized component samples of single
- * pixel. The scale and multiplication state of the samples are
- * according to the color model. Each component sample is stored
- * as a separate element in the array.
- */
- public int[] getComponents(int pixel, int[] components, int offset)
- {
- // subclasses has to implement this method.
- throw new UnsupportedOperationException();
- }
-
- /**
- * Fills an array with the unnormalized component samples from an
- * array of transferType containing a single pixel. I.e. decompose
- * the pixel, but not perform any color conversion.
- *
- * This method is typically overriden in subclasses to provide a
- * more efficient implementation.
- *
- * @param pixel an array of transferType containing a single pixel. The
- * pixel should be encoded in the natural way of the color model. If
- * this argument is not an array, as expected, a {@link ClassCastException}
- * will be thrown.
- * @param components an array that will be filled with the color component
- * of the pixel. If this is null, a new array will be allocated
- * @param offset index into the components array at which the result
- * will be stored
- *
- * @return arrays of unnormalized component samples of single
- * pixel. The scale and multiplication state of the samples are
- * according to the color model. Each component sample is stored
- * as a separate element in the array.
- */
- public int[] getComponents(Object pixel, int[] components, int offset)
- {
- // subclasses has to implement this method.
- throw new UnsupportedOperationException();
- }
-
- /**
- * Convert normalized components to unnormalized components.
- */
- public int[] getUnnormalizedComponents(float[] normComponents,
- int normOffset,
- int[] components,
- int offset)
- {
- int numComponents = getNumComponents();
- if (components == null)
- {
- components = new int[offset + numComponents];
- }
-
- for (int i=0; i<numComponents; i++)
- {
- float in = normComponents[normOffset++];
- int out = (int) (in * ((1<<getComponentSize(i)) - 1));
- components[offset++] = out;
- }
- return components;
- }
-
- /**
- * Convert unnormalized components to normalized components.
- */
- public float[] getNormalizedComponents(int[] components,
- int offset,
- float[] normComponents,
- int normOffset)
- {
- int numComponents = getNumComponents();
- if (normComponents == null)
- {
- normComponents = new float[normOffset + numComponents];
- }
-
- for (int i=0; i<numComponents; i++)
- {
- float in = components[offset++];
- float out = in / ((1<<getComponentSize(i)) - 1);
- normComponents[normOffset++] = out;
- }
- return normComponents;
- }
-
- /**
- * Convert unnormalized components to normalized components.
- *
- * @since 1.4
- */
- public float[] getNormalizedComponents (Object pixel,
- float[] normComponents,
- int normOffset)
- {
- int[] components = getComponents(pixel, null, 0);
- return getNormalizedComponents(components, 0, normComponents, normOffset);
- }
-
- /**
- * Converts the unnormalized component samples from an array to a
- * pixel value. I.e. composes the pixel from component samples, but
- * does not perform any color conversion or scaling of the samples.
- *
- * This method performs the inverse function of
- * <code>getComponents(int pixel, int[] components,
- * int offset)</code>. I.e.
- *
- * <code>(pixel == cm.getDataElement(cm.getComponents(pixel, null,
- * 0), 0))</code>.
- *
- * This method is overriden in subclasses since this abstract class throws
- * UnsupportedOperationException().
- *
- * @param components Array of unnormalized component samples of single
- * pixel. The scale and multiplication state of the samples are according
- * to the color model. Each component sample is stored as a separate element
- * in the array.
- * @param offset Position of the first value of the pixel in components.
- *
- * @return pixel value encoded according to the color model.
- */
- public int getDataElement(int[] components, int offset)
- {
- // subclasses have to implement this method.
- throw new UnsupportedOperationException();
- }
-
- /**
- * Converts the normalized component samples from an array to a pixel
- * value. I.e. composes the pixel from component samples, but does not
- * perform any color conversion or scaling of the samples.
- *
- * This method is typically overriden in subclasses to provide a
- * more efficient implementation. The method provided by this abstract
- * class converts the components to unnormalized form and returns
- * getDataElement(int[], int).
- *
- * @param components Array of normalized component samples of single pixel.
- * The scale and multiplication state of the samples are according to the
- * color model. Each component sample is stored as a separate element in the
- * array.
- * @param offset Position of the first value of the pixel in components.
- *
- * @return pixel value encoded according to the color model.
- * @since 1.4
- */
- public int getDataElement (float[] components, int offset)
- {
- return
- getDataElement(getUnnormalizedComponents(components, offset, null, 0),
- 0);
- }
-
- public Object getDataElements(int[] components, int offset, Object obj)
- {
- // subclasses have to implement this method.
- throw new UnsupportedOperationException();
- }
-
- /**
- * Converts the normalized component samples from an array to an array of
- * TransferType values. I.e. composes the pixel from component samples, but
- * does not perform any color conversion or scaling of the samples.
- *
- * If obj is null, a new array of TransferType is allocated and returned.
- * Otherwise the results are stored in obj and obj is returned. If obj is
- * not long enough, ArrayIndexOutOfBounds is thrown. If obj is not an array
- * of primitives, ClassCastException is thrown.
- *
- * This method is typically overriden in subclasses to provide a
- * more efficient implementation. The method provided by this abstract
- * class converts the components to unnormalized form and returns
- * getDataElement(int[], int, Object).
- *
- * @param components Array of normalized component samples of single pixel.
- * The scale and multiplication state of the samples are according to the
- * color model. Each component sample is stored as a separate element in the
- * array.
- * @param offset Position of the first value of the pixel in components.
- * @param obj Array of TransferType or null.
- *
- * @return pixel value encoded according to the color model.
- * @throws ArrayIndexOutOfBoundsException
- * @throws ClassCastException
- * @since 1.4
- */
- public Object getDataElements(float[] components, int offset, Object obj)
- {
- return
- getDataElements(getUnnormalizedComponents(components, offset, null, 0),
- 0, obj);
- }
-
- public boolean equals(Object obj)
- {
- if (!(obj instanceof ColorModel)) return false;
-
- ColorModel o = (ColorModel) obj;
- return
- (pixel_bits == o.pixel_bits) &&
- (transferType == o.transferType) &&
- (transparency == o.transparency) &&
- (hasAlpha == o.hasAlpha) &&
- (isAlphaPremultiplied == o.isAlphaPremultiplied) &&
- Arrays.equals(bits, o.bits) &&
- (cspace.equals(o.cspace));
- }
-
- public final ColorSpace getColorSpace()
- {
- return cspace;
- }
-
- public ColorModel coerceData(WritableRaster raster,
- boolean isAlphaPremultiplied)
- {
- // This method should always be overridden, but is not abstract.
- throw new UnsupportedOperationException();
- }
-
- void coerceDataWorker(WritableRaster raster,
- boolean isAlphaPremultiplied)
- {
- int w = raster.getWidth();
- int h = raster.getHeight();
- int x = raster.getMinX();
- int y = raster.getMinY();
- int size = w * h;
- int numColors = getNumColorComponents();
- int numComponents = getNumComponents();
- int alphaScale = (1 << getComponentSize(numColors)) - 1;
- double[] pixels = raster.getPixels(x, y, w, h, (double[]) null);
-
- for (int i = 0; i < size; i++)
- {
- double alpha = pixels[i * numComponents + numColors] / alphaScale;
- for (int c = 0; c < numColors; c++)
- {
- int offset = i * numComponents + c;
- if (isAlphaPremultiplied)
- pixels[offset] = Math.round(pixels[offset] * alpha);
- else
- pixels[offset] = Math.round(pixels[offset] / alpha);
- }
- }
-
- raster.setPixels(0, 0, w, h, pixels);
- }
-
- /**
- * Checks if the given raster has a compatible data-layout (SampleModel).
- * @param raster The Raster to test.
- * @return true if raster is compatible.
- */
- public boolean isCompatibleRaster(Raster raster)
- {
- SampleModel sampleModel = raster.getSampleModel();
- return isCompatibleSampleModel(sampleModel);
- }
-
- // Typically overridden
- public WritableRaster createCompatibleWritableRaster(int w, int h)
- {
- return new WritableRaster(createCompatibleSampleModel(w, h),
- new Point(0, 0));
- }
-
- // Typically overridden
- public SampleModel createCompatibleSampleModel(int w, int h)
- {
- throw new UnsupportedOperationException();
- }
-
- // Typically overridden
- public boolean isCompatibleSampleModel(SampleModel sm)
- {
- return sm.getTransferType() == transferType;
- }
-
- public final int getTransferType ()
- {
- return transferType;
- }
-
- /**
- * Subclasses must override this method if it is possible for the
- * color model to have an alpha channel.
- *
- * @return null, as per JDK 1.3 doc. Subclasses will only return
- * null if no alpha raster exists.
- */
- public WritableRaster getAlphaRaster(WritableRaster raster)
- {
- return null;
-
- /* It is a mystery to me why we couldn't use the following code...
-
-
- if (!hasAlpha()) return null;
-
- SampleModel sm = raster.getSampleModel();
- int[] alphaBand = { sm.getNumBands() - 1 };
- SampleModel alphaModel = sm.createSubsetSampleModel(alphaBand);
- DataBuffer buffer = raster.getDataBuffer();
- Point origin = new Point(0, 0);
- return Raster.createWritableRaster(alphaModel, buffer, origin);
-
-
- ...here, and avoided overriding the method in subclasses,
- but the Sun docs state that this method always will return
- null, and that overriding is required. Oh, well.
- */
- }
-
- String stringParam()
- {
- return "pixel_bits=" + pixel_bits +
- ", cspace=" + cspace +
- ", transferType=" + transferType +
- ", transparency=" + transparency +
- ", hasAlpha=" + hasAlpha +
- ", isAlphaPremultiplied=" + isAlphaPremultiplied;
- }
-
- public String toString()
- {
- return getClass().getName() + "[" + stringParam() + "]";
- }
-
- /**
- * A color model optimized for standard sRGB.
- */
- private static class SRGBColorModel
- extends DirectColorModel
- {
-
- SRGBColorModel()
- {
- super(32,0x00FF0000,0x0000FF00,0x000000FF,0xFF000000);
- }
-
- public int getAlpha(Object inData)
- {
- return ((((int[]) inData)[0]) >> 24) & 0xFF;
- }
-
- public int getBlue(Object inData)
- {
- return ((((int[]) inData)[0])) & 0xFF;
- }
-
- public int getGreen(Object inData)
- {
- return ((((int[]) inData)[0]) >> 8) & 0xFF;
- }
-
- public int getRed(Object inData)
- {
- return ((((int[]) inData)[0]) >> 16) & 0xFF;
- }
-
- public int getRGB(Object inData)
- {
- return ((int[]) inData)[0];
- }
-
- public Object getDataElements(int rgb, Object pixel)
- {
- if(pixel == null)
- {
- pixel = new int[]{rgb};
- }
- else
- {
- ((int[]) pixel)[0] = rgb;
- }
-
- return pixel;
- }
- }
-}
diff --git a/libjava/classpath/java/awt/image/ComponentColorModel.java b/libjava/classpath/java/awt/image/ComponentColorModel.java
deleted file mode 100644
index ef0b84f..0000000
--- a/libjava/classpath/java/awt/image/ComponentColorModel.java
+++ /dev/null
@@ -1,408 +0,0 @@
-/* ComponentColorModel.java --
- Copyright (C) 2000, 2002, 2004 Free Software Foundation
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-import gnu.java.awt.Buffers;
-
-import java.awt.Point;
-import java.awt.color.ColorSpace;
-import java.util.Arrays;
-
-public class ComponentColorModel extends ColorModel
-{
- // Find sum of all elements of the array.
- private static int sum(int[] values)
- {
- int sum = 0;
- for (int i=0; i<values.length; i++)
- sum += values[i];
- return sum;
- }
-
- // Create an appropriate array of bits, given a colorspace (ie, number of
- // bands), size of the storage data type, and presence of an alpha band.
- private static int[] findBits(ColorSpace colorSpace, int transferType,
- boolean hasAlpha)
- {
- int[] bits;
- if (hasAlpha)
- bits = new int[colorSpace.getNumComponents()+1];
- else
- bits = new int[colorSpace.getNumComponents()];
-
- Arrays.fill(bits, DataBuffer.getDataTypeSize(transferType));
-
- return bits;
- }
-
- public ComponentColorModel(ColorSpace colorSpace, int[] bits,
- boolean hasAlpha,
- boolean isAlphaPremultiplied,
- int transparency, int transferType)
- {
- super(sum(bits), bits, colorSpace, hasAlpha, isAlphaPremultiplied,
- transparency, transferType);
- }
-
- /**
- * Construct a new ComponentColorModel.
- *
- * This constructor makes all bits of each sample significant, so for a
- * transferType of DataBuffer.BYTE, the bits per sample is 8, etc. If
- * both hasAlpha and isAlphaPremultiplied are true, color samples are
- * assumed to be premultiplied by the alpha component. Transparency may be
- * one of OPAQUE, BITMASK, or TRANSLUCENT.
- *
- * @param colorSpace The colorspace for this color model.
- * @param hasAlpha True if there is an alpha component.
- * @param isAlphaPremultiplied True if colors are already multiplied by
- * alpha.
- * @param transparency The type of alpha values.
- * @param transferType Data type of pixel sample values.
- * @since 1.4
- */
- public ComponentColorModel(ColorSpace colorSpace,
- boolean hasAlpha,
- boolean isAlphaPremultiplied,
- int transparency, int transferType)
- {
- this(colorSpace, findBits(colorSpace, transferType, hasAlpha), hasAlpha,
- isAlphaPremultiplied, transparency, transferType);
- }
-
- public int getRed(int pixel)
- {
- if (getNumComponents()>1) throw new IllegalArgumentException();
- return (int) getRGBFloat(pixel)[0];
- }
-
- public int getGreen(int pixel)
- {
- if (getNumComponents()>1) throw new IllegalArgumentException();
- return (int) getRGBFloat(pixel)[0];
- }
-
- public int getBlue(int pixel)
- {
- if (getNumComponents()>1) throw new IllegalArgumentException();
- return (int) getRGBFloat(pixel)[0];
- }
-
- public int getAlpha(int pixel)
- {
- if (getNumComponents()>1) throw new IllegalArgumentException();
- int shift = 8 - getComponentSize(getNumColorComponents());
- if (shift >= 0) return pixel << shift;
- return pixel >> (-shift);
- }
-
- public int getRGB(int pixel)
- {
- float[] rgb = getRGBFloat(pixel);
- int ret = getRGB(rgb);
- if (hasAlpha()) ret |= getAlpha(pixel) << 24;
- return ret;
- }
-
-
- /* Note, it's OK to pass a to large array to toRGB(). Extra
- elements are ignored. */
-
- private float[] getRGBFloat(int pixel)
- {
- float[] data = { pixel };
- return cspace.toRGB(data);
- }
-
- private float[] getRGBFloat(Object inData)
- {
- DataBuffer buffer =
- Buffers.createBufferFromData(transferType, inData,
- getNumComponents());
- int colors = getNumColorComponents();
- float[] data = new float[colors];
-
- // FIXME: unpremultiply data that is premultiplied
- for (int i=0; i<colors; i++)
- {
- float maxValue = (1<<getComponentSize(i))-1;
- data[i] = buffer.getElemFloat(i)/maxValue;
- }
- float[] rgb = cspace.toRGB(data);
- return rgb;
- }
-
- public int getRed(Object inData)
- {
- return (int) getRGBFloat(inData)[0]*255;
- }
-
- public int getGreen(Object inData)
- {
- return (int) getRGBFloat(inData)[1]*255;
- }
-
- public int getBlue(Object inData)
- {
- return (int) getRGBFloat(inData)[2]*255;
- }
-
- public int getAlpha(Object inData)
- {
- DataBuffer buffer =
- Buffers.createBufferFromData(transferType, inData,
- getNumComponents());
- int shift = 8 - getComponentSize(getNumColorComponents());
- int alpha = buffer.getElem(getNumColorComponents());
- if (shift >= 0) return alpha << shift;
- return alpha >> (-shift);
- }
-
- private int getRGB(float[] rgb)
- {
- /* NOTE: We could cast to byte instead of int here. This would
- avoid bits spilling over from one bit field to
- another. But, if we assume that floats are in the [0.0,
- 1.0] range, this will never happen anyway. */
-
- /* Remember to multiply BEFORE casting to int, otherwise, decimal
- point data will be lost. */
- int ret =
- (((int) (rgb[0]*255F)) << 16) |
- (((int) (rgb[1]*255F)) << 8) |
- (((int) (rgb[2]*255F)) << 0);
- return ret;
- }
-
- /**
- * @param inData pixel data of transferType, as returned by the
- * getDataElements method in SampleModel.
- */
- public int getRGB(Object inData)
- {
- float[] rgb = getRGBFloat(inData);
- int ret = getRGB(rgb);
- if (hasAlpha()) ret |= getAlpha(inData) << 24;
- return ret;
- }
-
- public Object getDataElements(int rgb, Object pixel)
- {
- // Convert rgb to [0.0, 1.0] sRGB values.
- float[] rgbFloats = {
- ((rgb >> 16)&0xff)/255.0F,
- ((rgb >> 8)&0xff)/255.0F,
- ((rgb >> 0)&0xff)/255.0F
- };
-
- // Convert from rgb to color space components.
- float[] data = cspace.fromRGB(rgbFloats);
- DataBuffer buffer = Buffers.createBuffer(transferType, pixel,
- getNumComponents());
- int numColors = getNumColorComponents();
-
- if (hasAlpha())
- {
- float alpha = ((rgb >> 24)&0xff)/255.0F;
-
- /* If color model has alpha and should be premultiplied, multiply
- color space components with alpha value. */
- if (isAlphaPremultiplied()) {
- for (int i=0; i<numColors; i++)
- data[i] *= alpha;
- }
- // Scale the alpha sample to the correct number of bits.
- alpha *= (1<<(bits[numColors]-1));
- // Arrange the alpha sample in the output array.
- buffer.setElemFloat(numColors, alpha);
- }
- for (int i=0; i<numColors; i++)
- {
- // Scale the color samples to the correct number of bits.
- float value = data[i]*(1<<(bits[i]-1));
- // Arrange the color samples in the output array.
- buffer.setElemFloat(i, value);
- }
- return Buffers.getData(buffer);
- }
-
- public int[] getComponents(int pixel, int[] components, int offset)
- {
- if (getNumComponents()>1) throw new IllegalArgumentException();
- if (components == null)
- components = new int[getNumComponents() + offset];
- components[offset] = pixel;
- return components;
- }
-
- public int[] getComponents(Object pixel, int[] components, int offset)
- {
- DataBuffer buffer = Buffers.createBuffer(transferType, pixel,
- getNumComponents());
- int numComponents = getNumComponents();
-
- if (components == null)
- components = new int[numComponents + offset];
-
- for (int i=0; i<numComponents; i++)
- components[offset++] = buffer.getElem(i);
-
- return components;
- }
-
- public int getDataElement(int[] components, int offset)
- {
- if (getNumComponents()>1) throw new IllegalArgumentException();
- return components[offset];
- }
-
- public Object getDataElements(int[] components, int offset, Object obj)
- {
- DataBuffer buffer = Buffers.createBuffer(transferType, obj,
- getNumComponents());
- int numComponents = getNumComponents();
-
- for (int i=0; i<numComponents; i++)
- buffer.setElem(i, components[offset++]);
-
- return Buffers.getData(buffer);
- }
-
- public ColorModel coerceData(WritableRaster raster,
- boolean isAlphaPremultiplied) {
- if (this.isAlphaPremultiplied == isAlphaPremultiplied || !hasAlpha())
- return this;
-
- /* TODO: provide better implementation based on the
- assumptions we can make due to the specific type of the
- color model. */
- coerceDataWorker(raster, isAlphaPremultiplied);
-
- return new ComponentColorModel(cspace, hasAlpha, isAlphaPremultiplied,
- transparency, transferType);
- }
-
- public boolean isCompatibleRaster(Raster raster)
- {
- return super.isCompatibleRaster(raster);
- // FIXME: Should we test something more here? (Why override?)
- }
-
- public WritableRaster createCompatibleWritableRaster(int w, int h)
- {
- SampleModel sm = createCompatibleSampleModel(w, h);
- Point origin = new Point(0, 0);
- return Raster.createWritableRaster(sm, origin);
- }
-
-
- /**
- * Creates a <code>SampleModel</code> whose arrangement of pixel
- * data is compatible to this <code>ColorModel</code>.
- *
- * @param w the number of pixels in the horizontal direction.
- * @param h the number of pixels in the vertical direction.
- */
- public SampleModel createCompatibleSampleModel(int w, int h)
- {
- int pixelStride, scanlineStride;
- int[] bandOffsets;
-
- pixelStride = getNumComponents();
- scanlineStride = pixelStride * w;
-
- /* We might be able to re-use the same bandOffsets array among
- * multiple calls to this method. However, this optimization does
- * not seem worthwile because setting up descriptive data
- * structures (such as SampleModels) is neglectible in comparision
- * to shuffling around masses of pixel data.
- */
- bandOffsets = new int[pixelStride];
- for (int i = 0; i < pixelStride; i++)
- bandOffsets[i] = i;
-
- /* FIXME: Think about whether it would make sense to return the
- * possibly more efficient PixelInterleavedSampleModel for other
- * transferTypes as well. It seems unlikely that this would break
- * any user applications, so the Mauve tests on this method
- * might be too restrictive.
- */
- switch (transferType)
- {
- case DataBuffer.TYPE_BYTE:
- case DataBuffer.TYPE_USHORT:
- return new PixelInterleavedSampleModel(transferType, w, h,
- pixelStride,
- scanlineStride,
- bandOffsets);
-
- default:
- return new ComponentSampleModel(transferType, w, h,
- pixelStride,
- scanlineStride,
- bandOffsets);
- }
- }
-
-
- public boolean isCompatibleSampleModel(SampleModel sm)
- {
- return
- (sm instanceof ComponentSampleModel) &&
- super.isCompatibleSampleModel(sm);
- }
-
- public WritableRaster getAlphaRaster(WritableRaster raster)
- {
- if (!hasAlpha()) return null;
-
- SampleModel sm = raster.getSampleModel();
- int[] alphaBand = { sm.getNumBands() - 1 };
- SampleModel alphaModel = sm.createSubsetSampleModel(alphaBand);
- DataBuffer buffer = raster.getDataBuffer();
- Point origin = new Point(0, 0);
- return Raster.createWritableRaster(alphaModel, buffer, origin);
- }
-
- public boolean equals(Object obj)
- {
- if (!(obj instanceof ComponentColorModel)) return false;
- return super.equals(obj);
- }
-}
diff --git a/libjava/classpath/java/awt/image/ComponentSampleModel.java b/libjava/classpath/java/awt/image/ComponentSampleModel.java
deleted file mode 100644
index f32eae3..0000000
--- a/libjava/classpath/java/awt/image/ComponentSampleModel.java
+++ /dev/null
@@ -1,755 +0,0 @@
-/* Copyright (C) 2000, 2002, 2006, Free Software Foundation
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package java.awt.image;
-
-import java.util.Arrays;
-
-/**
- * ComponentSampleModel supports a flexible organization of pixel samples in
- * memory, permitting pixel samples to be interleaved by band, by scanline,
- * and by pixel.
- *
- * A DataBuffer for this sample model has K banks of data. Pixels have N
- * samples, so there are N bands in the DataBuffer. Each band is completely
- * contained in one bank of data, but a bank may contain more than one band.
- * Each pixel sample is stored in a single data element.
- *
- * Within a bank, each band begins at an offset stored in bandOffsets. The
- * banks containing the band is given by bankIndices. Within the bank, there
- * are three dimensions - band, pixel, and scanline. The dimension ordering
- * is controlled by bandOffset, pixelStride, and scanlineStride, which means
- * that any combination of interleavings is supported.
- *
- * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
- */
-public class ComponentSampleModel extends SampleModel
-{
- /** The offsets to the first sample for each band. */
- protected int[] bandOffsets;
-
- /** The indices of the bank used to store each band in a data buffer. */
- protected int[] bankIndices;
-
- /**
- * The number of bands in the image.
- * @specnote This field shadows the protected numBands in SampleModel.
- */
- protected int numBands;
-
- /** Used when creating data buffers. */
- protected int numBanks;
-
- /**
- * The number of data elements between a sample in one row and the
- * corresponding sample in the next row.
- */
- protected int scanlineStride;
-
- /**
- * The number of data elements between a sample for one pixel and the
- * corresponding sample for the next pixel in the same row.
- */
- protected int pixelStride;
-
- /**
- * Creates a new sample model that assumes that all bands are stored in a
- * single bank of the {@link DataBuffer}.
- * <p>
- * Note that the <code>bandOffsets</code> array is copied to internal storage
- * to prevent subsequent changes to the array from affecting this object.
- *
- * @param dataType the data type (one of {@link DataBuffer#TYPE_BYTE},
- * {@link DataBuffer#TYPE_USHORT}, {@link DataBuffer#TYPE_SHORT},
- * {@link DataBuffer#TYPE_INT}, {@link DataBuffer#TYPE_FLOAT} or
- * {@link DataBuffer#TYPE_DOUBLE}).
- * @param w the width in pixels.
- * @param h the height in pixels.
- * @param pixelStride the number of data elements in the step from a sample
- * in one pixel to the corresponding sample in the next pixel.
- * @param scanlineStride the number of data elements in the step from a
- * sample in a pixel to the corresponding sample in the pixel in the next
- * row.
- * @param bandOffsets the offset to the first element for each band, with
- * the size of the array defining the number of bands (<code>null</code>
- * not permitted).
- *
- * @throws IllegalArgumentException if <code>dataType</code> is not one of
- * the specified values.
- * @throws IllegalArgumentException if <code>w</code> is less than or equal
- * to zero.
- * @throws IllegalArgumentException if <code>h</code> is less than or equal
- * to zero.
- * @throws IllegalArgumentException if <code>w * h</code> exceeds
- * {@link Integer#MAX_VALUE}.
- * @throws IllegalArgumentException if <code>pixelStride</code> is negative.
- * @throws IllegalArgumentException if <code>scanlineStride</code> is less
- * than or equal to zero.
- * @throws IllegalArgumentException if <code>bandOffsets</code> has zero
- * length.
- */
- public ComponentSampleModel(int dataType,
- int w, int h,
- int pixelStride,
- int scanlineStride,
- int[] bandOffsets)
- {
- this(dataType, w, h, pixelStride, scanlineStride,
- new int[bandOffsets.length], bandOffsets);
- }
-
- /**
- * Creates a new sample model that assumes that all bands are stored in a
- * single bank of the {@link DataBuffer}.
- *
- * @param dataType the data type (one of {@link DataBuffer#TYPE_BYTE},
- * {@link DataBuffer#TYPE_USHORT}, {@link DataBuffer#TYPE_SHORT},
- * {@link DataBuffer#TYPE_INT}, {@link DataBuffer#TYPE_FLOAT} or
- * {@link DataBuffer#TYPE_DOUBLE}).
- * @param w the width in pixels.
- * @param h the height in pixels.
- * @param pixelStride the number of data elements in the step from a sample
- * in one pixel to the corresponding sample in the next pixel.
- * @param scanlineStride the number of data elements in the step from a
- * sample in a pixel to the corresponding sample in the pixel in the next
- * row.
- * @param bankIndices the index of the bank in which each band is stored
- * (<code>null</code> not permitted). This array is copied to internal
- * storage so that subsequent updates to the array do not affect the sample
- * model.
- * @param bandOffsets the offset to the first element for each band, with
- * the size of the array defining the number of bands (<code>null</code>
- * not permitted). This array is copied to internal storage so that
- * subsequent updates to the array do not affect the sample model.
- *
- * @throws IllegalArgumentException if <code>dataType</code> is not one of
- * the specified values.
- * @throws IllegalArgumentException if <code>w</code> is less than or equal
- * to zero.
- * @throws IllegalArgumentException if <code>h</code> is less than or equal
- * to zero.
- * @throws IllegalArgumentException if <code>w * h</code> exceeds
- * {@link Integer#MAX_VALUE}.
- * @throws IllegalArgumentException if <code>pixelStride</code> is negative.
- * @throws IllegalArgumentException if <code>scanlineStride</code> is less
- * than or equal to zero.
- * @throws IllegalArgumentException if <code>bandOffsets</code> has zero
- * length.
- */
- public ComponentSampleModel(int dataType,
- int w, int h,
- int pixelStride,
- int scanlineStride,
- int[] bankIndices,
- int[] bandOffsets)
- {
- super(dataType, w, h, bandOffsets.length);
-
- // super permits DataBuffer.TYPE_UNDEFINED but this class doesn't...
- if (dataType == DataBuffer.TYPE_UNDEFINED)
- throw new IllegalArgumentException("Unsupported dataType.");
-
- if ((pixelStride < 0) || (scanlineStride < 0) || (bandOffsets.length < 1)
- || (bandOffsets.length != bankIndices.length))
- throw new IllegalArgumentException();
-
- this.bandOffsets = (int[]) bandOffsets.clone();
- this.bankIndices = (int[]) bankIndices.clone();
- this.numBands = bandOffsets.length;
-
- this.numBanks = 0;
- for (int b = 0; b < bankIndices.length; b++)
- this.numBanks = Math.max(this.numBanks, bankIndices[b] + 1);
-
- this.scanlineStride = scanlineStride;
- this.pixelStride = pixelStride;
-
- }
-
- /**
- * Creates a new sample model that is compatible with this one, but with the
- * specified dimensions.
- *
- * @param w the width (must be greater than zero).
- * @param h the height (must be greater than zero).
- *
- * @return A new sample model.
- */
- public SampleModel createCompatibleSampleModel(int w, int h)
- {
- return new ComponentSampleModel(dataType, w, h, pixelStride,
- scanlineStride, bankIndices,
- bandOffsets);
- }
-
- /**
- * Creates a new sample model that provides access to a subset of the bands
- * that this sample model supports.
- *
- * @param bands the bands (<code>null</code> not permitted).
- *
- * @return The new sample model.
- */
- public SampleModel createSubsetSampleModel(int[] bands)
- {
- int numBands = bands.length;
-
- int[] bankIndices = new int[numBands];
- int[] bandOffsets = new int[numBands];
- for (int b = 0; b < numBands; b++)
- {
- bankIndices[b] = this.bankIndices[bands[b]];
- bandOffsets[b] = this.bandOffsets[bands[b]];
- }
-
- return new ComponentSampleModel(dataType, width, height, pixelStride,
- scanlineStride, bankIndices,
- bandOffsets);
- }
-
- /**
- * Creates a new data buffer that is compatible with this sample model.
- *
- * @return The new data buffer.
- */
- public DataBuffer createDataBuffer()
- {
- // Maybe this value should be precalculated in the constructor?
- int highestOffset = 0;
- for (int b = 0; b < numBands; b++)
- highestOffset = Math.max(highestOffset, bandOffsets[b]);
- int size = pixelStride * (width - 1) + scanlineStride * (height - 1)
- + highestOffset + 1;
-
- DataBuffer buffer = null;
- switch (getTransferType())
- {
- case DataBuffer.TYPE_BYTE:
- buffer = new DataBufferByte(size, numBanks);
- break;
- case DataBuffer.TYPE_SHORT:
- buffer = new DataBufferShort(size, numBanks);
- break;
- case DataBuffer.TYPE_USHORT:
- buffer = new DataBufferUShort(size, numBanks);
- break;
- case DataBuffer.TYPE_INT:
- buffer = new DataBufferInt(size, numBanks);
- break;
- case DataBuffer.TYPE_FLOAT:
- buffer = new DataBufferFloat(size, numBanks);
- break;
- case DataBuffer.TYPE_DOUBLE:
- buffer = new DataBufferDouble(size, numBanks);
- break;
- }
- return buffer;
- }
-
- /**
- * Returns the offset of the sample in band 0 for the pixel at location
- * <code>(x, y)</code>. This offset can be used to read a sample value from
- * a {@link DataBuffer}.
- *
- * @param x the x-coordinate.
- * @param y the y-coordinate.
- *
- * @return The offset.
- *
- * @see #getOffset(int, int, int)
- */
- public int getOffset(int x, int y)
- {
- return getOffset(x, y, 0);
- }
-
- /**
- * Returns the offset of the sample in band <code>b</code> for the pixel at
- * location <code>(x, y)</code>. This offset can be used to read a sample
- * value from a {@link DataBuffer}.
- *
- * @param x the x-coordinate.
- * @param y the y-coordinate.
- * @param b the band index.
- *
- * @return The offset.
- */
- public int getOffset(int x, int y, int b)
- {
- return bandOffsets[b] + pixelStride * x + scanlineStride * y;
- }
-
- /**
- * Returns the size in bits for each sample (one per band). For this sample
- * model, each band has the same sample size and this is determined by the
- * data type for the sample model.
- *
- * @return The sample sizes.
- *
- * @see SampleModel#getDataType()
- */
- public final int[] getSampleSize()
- {
- int size = DataBuffer.getDataTypeSize(getDataType());
- int[] sizes = new int[numBands];
-
- java.util.Arrays.fill(sizes, size);
- return sizes;
- }
-
- /**
- * Returns the size in bits for the samples in the specified band. In this
- * class, the sample size is the same for every band and is determined from
- * the data type for the model.
- *
- * @param band the band index (ignored here).
- *
- * @return The sample size in bits.
- *
- * @see SampleModel#getDataType()
- */
- public final int getSampleSize(int band)
- {
- return DataBuffer.getDataTypeSize(getDataType());
- }
-
- /**
- * Returns the indices of the bank(s) in the {@link DataBuffer} used to
- * store the samples for each band. The returned array is a copy, so that
- * altering it will not impact the sample model.
- *
- * @return The bank indices.
- */
- public final int[] getBankIndices()
- {
- return (int[]) bankIndices.clone();
- }
-
- /**
- * Returns the offsets to the first sample in each band. The returned array
- * is a copy, so that altering it will not impact the sample model.
- *
- * @return The offsets.
- */
- public final int[] getBandOffsets()
- {
- return (int[]) bandOffsets.clone();
- }
-
- /**
- * Returns the distance (in terms of element indices) between the sample for
- * one pixel and the corresponding sample for the equivalent pixel in the
- * next row. This is used in the calculation of the element offset for
- * retrieving samples from a {@link DataBuffer}.
- *
- * @return The distance between pixel samples in consecutive rows.
- */
- public final int getScanlineStride()
- {
- return scanlineStride;
- }
-
- /**
- * Returns the distance (in terms of element indices) between the sample for
- * one pixel and the corresponding sample for the next pixel in a row. This
- * is used in the calculation of the element offset for retrieving samples
- * from a {@link DataBuffer}.
- *
- * @return The distance between pixel samples in the same row.
- */
- public final int getPixelStride()
- {
- return pixelStride;
- }
-
- /**
- * Returns the number of data elements used to store the samples for one
- * pixel. In this model, this is the same as the number of bands.
- *
- * @return The number of data elements used to store the samples for one
- * pixel.
- */
- public final int getNumDataElements()
- {
- return numBands;
- }
-
- /**
- * Returns the samples for the pixel at location <code>(x, y)</code> in
- * a primitive array (the array type is determined by the data type for
- * this model). The <code>obj</code> argument provides an option to supply
- * an existing array to hold the result, if this is <code>null</code> a new
- * array will be allocated.
- *
- * @param x the x-coordinate.
- * @param y the y-coordinate.
- * @param obj a primitive array that, if not <code>null</code>, will be
- * used to store and return the sample values.
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @return An array of sample values for the specified pixel.
- */
- public Object getDataElements(int x, int y, Object obj, DataBuffer data)
- {
- int type = getTransferType();
- int numDataEls = getNumDataElements();
- int offset = y * scanlineStride + x * pixelStride;
- switch (type)
- {
- case DataBuffer.TYPE_BYTE:
- byte[] bData;
- if (obj == null)
- bData = new byte[numDataEls];
- else
- bData = (byte[]) obj;
- for (int i = 0; i < numDataEls; i++)
- {
- bData[i] = (byte) data.getElem(bankIndices[i],
- offset + bandOffsets[i]);
- }
- obj = bData;
- break;
- case DataBuffer.TYPE_SHORT:
- case DataBuffer.TYPE_USHORT:
- short[] sData;
- if (obj == null)
- sData = new short[numDataEls];
- else
- sData = (short[]) obj;
- for (int i = 0; i < numDataEls; i++)
- {
- sData[i] = (short) data.getElem(bankIndices[i],
- offset + bandOffsets[i]);
- }
- obj = sData;
- break;
- case DataBuffer.TYPE_INT:
- int[] iData;
- if (obj == null)
- iData = new int[numDataEls];
- else
- iData = (int[]) obj;
- for (int i = 0; i < numDataEls; i++)
- {
- iData[i] = data.getElem(bankIndices[i], offset + bandOffsets[i]);
- }
- obj = iData;
- break;
- case DataBuffer.TYPE_FLOAT:
- float[] fData;
- if (obj == null)
- fData = new float[numDataEls];
- else
- fData = (float[]) obj;
- for (int i = 0; i < numDataEls; i++)
- {
- fData[i] = data.getElemFloat(bankIndices[i],
- offset + bandOffsets[i]);
- }
- obj = fData;
- break;
- case DataBuffer.TYPE_DOUBLE:
- double[] dData;
- if (obj == null)
- dData = new double[numDataEls];
- else
- dData = (double[]) obj;
- for (int i = 0; i < numDataEls; i++)
- {
- dData[i] = data.getElemDouble(bankIndices[i],
- offset + bandOffsets[i]);
- }
- obj = dData;
- break;
- }
- return obj;
- }
-
-
- /**
- * Returns all the samples for the pixel at location <code>(x, y)</code>
- * stored in the specified data buffer.
- *
- * @param x the x-coordinate.
- * @param y the y-coordinate.
- * @param iArray an array that will be populated with the sample values and
- * returned as the result. The size of this array should be equal to the
- * number of bands in the model. If the array is <code>null</code>, a new
- * array is created.
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @return The samples for the specified pixel.
- *
- * @see #setPixel(int, int, int[], DataBuffer)
- */
- public int[] getPixel(int x, int y, int[] iArray, DataBuffer data)
- {
- if (x < 0 || x >= width || y < 0 || y >= height)
- throw new ArrayIndexOutOfBoundsException("Pixel (" + x + ", " + y
- + ") is out of bounds.");
- int offset = pixelStride * x + scanlineStride * y;
- if (iArray == null)
- iArray = new int[numBands];
- for (int b = 0; b < numBands; b++)
- {
- iArray[b] = data.getElem(bankIndices[b], offset + bandOffsets[b]);
- }
- return iArray;
- }
-
- /**
- * Returns the samples for all the pixels in a rectangular region.
- *
- * @param x the x-coordinate.
- * @param y the y-coordinate.
- * @param w the width.
- * @param h the height.
- * @param iArray an array that if non-<code>null</code> will be populated
- * with the sample values and returned as the result.
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @return The samples for all the pixels in the rectangle.
- */
- public int[] getPixels(int x, int y, int w, int h, int[] iArray,
- DataBuffer data)
- {
- int offset = pixelStride * x + scanlineStride * y;
- if (iArray == null)
- iArray = new int[numBands * w * h];
- int outOffset = 0;
- for (y = 0; y < h; y++)
- {
- int lineOffset = offset;
- for (x = 0; x < w; x++)
- {
- for (int b = 0; b < numBands; b++)
- {
- iArray[outOffset++]
- = data.getElem(bankIndices[b], lineOffset+bandOffsets[b]);
- }
- lineOffset += pixelStride;
- }
- offset += scanlineStride;
- }
- return iArray;
- }
-
- /**
- * Returns the sample for band <code>b</code> of the pixel at
- * <code>(x, y)</code> that is stored in the specified data buffer.
- *
- * @param x the x-coordinate.
- * @param y the y-coordinate.
- * @param b the band index.
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @return The sample value.
- *
- * @throws ArrayIndexOutOfBoundsException if <code>(x, y)</code> is outside
- * the bounds <code>[0, 0, width, height]</code>.
- *
- * @see #setSample(int, int, int, int, DataBuffer)
- */
- public int getSample(int x, int y, int b, DataBuffer data)
- {
- if (x < 0 || x >= width || y < 0 || y >= height)
- throw new ArrayIndexOutOfBoundsException("Sample (" + x + ", " + y
- + ") is out of bounds.");
- return data.getElem(bankIndices[b], getOffset(x, y, b));
- }
-
- /**
- * Sets the samples for the pixel at location <code>(x, y)</code> from the
- * supplied primitive array (the array type must be consistent with the data
- * type for this model).
- *
- * @param x the x-coordinate.
- * @param y the y-coordinate.
- * @param obj a primitive array containing the pixel's sample values.
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @see #setDataElements(int, int, Object, DataBuffer)
- */
- public void setDataElements(int x, int y, Object obj, DataBuffer data)
- {
- int type = getTransferType();
- int numDataEls = getNumDataElements();
- int offset = y * scanlineStride + x * pixelStride;
- switch (type)
- {
- case DataBuffer.TYPE_BYTE:
- byte[] bData = (byte[]) obj;
- for (int i = 0; i < numDataEls; i++)
- {
- data.setElem(bankIndices[i], offset + bandOffsets[i],
- ((int) bData[i]) & 0xFF);
- }
- break;
- case DataBuffer.TYPE_SHORT:
- case DataBuffer.TYPE_USHORT:
- short[] sData = (short[]) obj;
- for (int i = 0; i < numDataEls; i++)
- {
- data.setElem(bankIndices[i], offset + bandOffsets[i],
- ((int) sData[i]) & 0xFFFF);
- }
- break;
- case DataBuffer.TYPE_INT:
- int[] iData = (int[]) obj;
- for (int i = 0; i < numDataEls; i++)
- {
- data.setElem(bankIndices[i], offset + bandOffsets[i], iData[i]);
- }
- break;
- case DataBuffer.TYPE_FLOAT:
- float[] fData = (float[]) obj;
- for (int i = 0; i < numDataEls; i++)
- {
- data.setElemFloat(bankIndices[i], offset + bandOffsets[i],
- fData[i]);
- }
- break;
- case DataBuffer.TYPE_DOUBLE:
- double[] dData = (double[]) obj;
- for (int i = 0; i < numDataEls; i++)
- {
- data.setElemDouble(bankIndices[i], offset + bandOffsets[i],
- dData[i]);
- }
- break;
- }
- }
-
- /**
- * Sets the sample values for the pixel at location <code>(x, y)</code>
- * stored in the specified data buffer.
- *
- * @param x the x-coordinate.
- * @param y the y-coordinate.
- * @param iArray the pixel sample values (<code>null</code> not permitted).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @see #getPixel(int, int, int[], DataBuffer)
- */
- public void setPixel(int x, int y, int[] iArray, DataBuffer data)
- {
- int offset = pixelStride * x + scanlineStride * y;
- for (int b = 0; b < numBands; b++)
- data.setElem(bankIndices[b], offset + bandOffsets[b], iArray[b]);
- }
-
- /**
- * Sets the sample value for band <code>b</code> of the pixel at location
- * <code>(x, y)</code> in the specified data buffer.
- *
- * @param x the x-coordinate.
- * @param y the y-coordinate.
- * @param b the band index.
- * @param s the sample value.
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @see #getSample(int, int, int, DataBuffer)
- */
- public void setSample(int x, int y, int b, int s, DataBuffer data)
- {
- data.setElem(bankIndices[b], getOffset(x, y, b), s);
- }
-
- /**
- * Tests this sample model for equality with an arbitrary object. Returns
- * <code>true</code> if and only if:
- * <ul>
- * <li><code>obj</code> is not <code>null</code>;</li>
- * <li><code>obj</code> is an instance of <code>ComponentSampleModel</code>;
- * </li>
- * <li>both models have the same values for the <code>dataType</code>,
- * <code>width</code>, <code>height</code>, <code>pixelStride</code>,
- * <code>scanlineStride</code>, <code>bandOffsets</code> and
- * <code>bankIndices</code> fields.</li>
- * </ul>
- *
- * @param obj the object to test (<code>null</code> permitted).
- *
- * @return <code>true</code> if this sample model is equal to
- * <code>obj</code>, and <code>false</code> otherwise.
- */
- public boolean equals(Object obj)
- {
- if (obj == null)
- return false;
- if (! (obj instanceof ComponentSampleModel))
- return false;
- ComponentSampleModel that = (ComponentSampleModel) obj;
- if (this.dataType != that.dataType)
- return false;
- if (this.width != that.width)
- return false;
- if (this.height != that.height)
- return false;
- if (this.pixelStride != that.pixelStride)
- return false;
- if (this.scanlineStride != that.scanlineStride)
- return false;
- if (! Arrays.equals(this.bandOffsets, that.bandOffsets))
- return false;
- if (! Arrays.equals(this.bankIndices, that.bankIndices))
- return false;
- // couldn't find any difference, so...
- return true;
- }
-
- /**
- * Returns a hash code for this sample model.
- *
- * @return The hash code.
- */
- public int hashCode()
- {
- // this computation is based on the method described in Chapter 3
- // of Joshua Bloch's Effective Java...
- int result = 17;
- result = 37 * result + dataType;
- result = 37 * result + width;
- result = 37 * result + height;
- result = 37 * result + pixelStride;
- result = 37 * result + scanlineStride;
- for (int i = 0; i < bandOffsets.length; i++)
- result = 37 * result + bandOffsets[i];
- for (int i = 0; i < bankIndices.length; i++)
- result = 37 * result + bankIndices[i];
- return result;
- }
-}
diff --git a/libjava/classpath/java/awt/image/ConvolveOp.java b/libjava/classpath/java/awt/image/ConvolveOp.java
deleted file mode 100644
index 10b85f4..0000000
--- a/libjava/classpath/java/awt/image/ConvolveOp.java
+++ /dev/null
@@ -1,380 +0,0 @@
-/* ConvolveOp.java --
- Copyright (C) 2004, 2005, 2006, Free Software Foundation -- ConvolveOp
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-import java.awt.RenderingHints;
-import java.awt.geom.Point2D;
-import java.awt.geom.Rectangle2D;
-
-/**
- * Convolution filter.
- *
- * ConvolveOp convolves the source image with a Kernel to generate a
- * destination image. This involves multiplying each pixel and its neighbors
- * with elements in the kernel to compute a new pixel.
- *
- * Each band in a Raster is convolved and copied to the destination Raster.
- * For BufferedImages, convolution is applied to all components. Color
- * conversion will be applied if needed.
- *
- * Note that this filter ignores whether the source or destination is alpha
- * premultiplied. The reference spec states that data will be premultiplied
- * prior to convolving and divided back out afterwards (if needed), but testing
- * has shown that this is not the case with their implementation.
- *
- * @author jlquinn@optonline.net
- */
-public class ConvolveOp implements BufferedImageOp, RasterOp
-{
- /** Edge pixels are set to 0. */
- public static final int EDGE_ZERO_FILL = 0;
-
- /** Edge pixels are copied from the source. */
- public static final int EDGE_NO_OP = 1;
-
- private Kernel kernel;
- private int edge;
- private RenderingHints hints;
-
- /**
- * Construct a ConvolveOp.
- *
- * The edge condition specifies that pixels outside the area that can be
- * filtered are either set to 0 or copied from the source image.
- *
- * @param kernel The kernel to convolve with.
- * @param edgeCondition Either EDGE_ZERO_FILL or EDGE_NO_OP.
- * @param hints Rendering hints for color conversion, or null.
- */
- public ConvolveOp(Kernel kernel,
- int edgeCondition,
- RenderingHints hints)
- {
- this.kernel = kernel;
- edge = edgeCondition;
- this.hints = hints;
- }
-
- /**
- * Construct a ConvolveOp.
- *
- * The edge condition defaults to EDGE_ZERO_FILL.
- *
- * @param kernel The kernel to convolve with.
- */
- public ConvolveOp(Kernel kernel)
- {
- this.kernel = kernel;
- edge = EDGE_ZERO_FILL;
- hints = null;
- }
-
- /**
- * Converts the source image using the kernel specified in the
- * constructor. The resulting image is stored in the destination image if one
- * is provided; otherwise a new BufferedImage is created and returned.
- *
- * The source and destination BufferedImage (if one is supplied) must have
- * the same dimensions.
- *
- * @param src The source image.
- * @param dst The destination image.
- * @throws IllegalArgumentException if the rasters and/or color spaces are
- * incompatible.
- * @return The convolved image.
- */
- public final BufferedImage filter(BufferedImage src, BufferedImage dst)
- {
- if (src == dst)
- throw new IllegalArgumentException("Source and destination images " +
- "cannot be the same.");
-
- if (dst == null)
- dst = createCompatibleDestImage(src, src.getColorModel());
-
- // Make sure source image is premultiplied
- BufferedImage src1 = src;
- // The spec says we should do this, but mauve testing shows that Sun's
- // implementation does not check this.
- /*
- if (!src.isAlphaPremultiplied())
- {
- src1 = createCompatibleDestImage(src, src.getColorModel());
- src.copyData(src1.getRaster());
- src1.coerceData(true);
- }
- */
-
- BufferedImage dst1 = dst;
- if (src1.getColorModel().getColorSpace().getType() != dst.getColorModel().getColorSpace().getType())
- dst1 = createCompatibleDestImage(src, src.getColorModel());
-
- filter(src1.getRaster(), dst1.getRaster());
-
- // Since we don't coerceData above, we don't need to divide it back out.
- // This is wrong (one mauve test specifically tests converting a non-
- // premultiplied image to a premultiplied image, and it shows that Sun
- // simply ignores the premultipled flag, contrary to the spec), but we
- // mimic it for compatibility.
- /*
- if (! dst.isAlphaPremultiplied())
- dst1.coerceData(false);
- */
-
- // Convert between color models if needed
- if (dst1 != dst)
- new ColorConvertOp(hints).filter(dst1, dst);
-
- return dst;
- }
-
- /**
- * Creates an empty BufferedImage with the size equal to the source and the
- * correct number of bands. The new image is created with the specified
- * ColorModel, or if no ColorModel is supplied, an appropriate one is chosen.
- *
- * @param src The source image.
- * @param dstCM A color model for the destination image (may be null).
- * @return The new compatible destination image.
- */
- public BufferedImage createCompatibleDestImage(BufferedImage src,
- ColorModel dstCM)
- {
- if (dstCM != null)
- return new BufferedImage(dstCM,
- src.getRaster().createCompatibleWritableRaster(),
- src.isAlphaPremultiplied(), null);
-
- return new BufferedImage(src.getWidth(), src.getHeight(), src.getType());
- }
-
- /* (non-Javadoc)
- * @see java.awt.image.RasterOp#getRenderingHints()
- */
- public final RenderingHints getRenderingHints()
- {
- return hints;
- }
-
- /**
- * Get the edge condition for this Op.
- *
- * @return The edge condition.
- */
- public int getEdgeCondition()
- {
- return edge;
- }
-
- /**
- * Returns (a clone of) the convolution kernel.
- *
- * @return The convolution kernel.
- */
- public final Kernel getKernel()
- {
- return (Kernel) kernel.clone();
- }
-
- /**
- * Converts the source raster using the kernel specified in the constructor.
- * The resulting raster is stored in the destination raster if one is
- * provided; otherwise a new WritableRaster is created and returned.
- *
- * If the convolved value for a sample is outside the range of [0-255], it
- * will be clipped.
- *
- * The source and destination raster (if one is supplied) cannot be the same,
- * and must also have the same dimensions.
- *
- * @param src The source raster.
- * @param dest The destination raster.
- * @throws IllegalArgumentException if the rasters identical.
- * @throws ImagingOpException if the convolution is not possible.
- * @return The transformed raster.
- */
- public final WritableRaster filter(Raster src, WritableRaster dest)
- {
- if (src == dest)
- throw new IllegalArgumentException("src == dest is not allowed.");
- if (kernel.getWidth() > src.getWidth()
- || kernel.getHeight() > src.getHeight())
- throw new ImagingOpException("The kernel is too large.");
- if (dest == null)
- dest = createCompatibleDestRaster(src);
- else if (src.getNumBands() != dest.getNumBands())
- throw new ImagingOpException("src and dest have different band counts.");
-
- // calculate the borders that the op can't reach...
- int kWidth = kernel.getWidth();
- int kHeight = kernel.getHeight();
- int left = kernel.getXOrigin();
- int right = Math.max(kWidth - left - 1, 0);
- int top = kernel.getYOrigin();
- int bottom = Math.max(kHeight - top - 1, 0);
-
- // Calculate max sample values for clipping
- int[] maxValue = src.getSampleModel().getSampleSize();
- for (int i = 0; i < maxValue.length; i++)
- maxValue[i] = (int)Math.pow(2, maxValue[i]) - 1;
-
- // process the region that is reachable...
- int regionW = src.width - left - right;
- int regionH = src.height - top - bottom;
- float[] kvals = kernel.getKernelData(null);
- float[] tmp = new float[kWidth * kHeight];
-
- for (int x = 0; x < regionW; x++)
- {
- for (int y = 0; y < regionH; y++)
- {
- // FIXME: This needs a much more efficient implementation
- for (int b = 0; b < src.getNumBands(); b++)
- {
- float v = 0;
- src.getSamples(x, y, kWidth, kHeight, b, tmp);
- for (int i = 0; i < tmp.length; i++)
- v += tmp[tmp.length - i - 1] * kvals[i];
- // FIXME: in the above line, I've had to reverse the order of
- // the samples array to make the tests pass. I haven't worked
- // out why this is necessary.
-
- // This clipping is is undocumented, but determined by testing.
- if (v > maxValue[b])
- v = maxValue[b];
- else if (v < 0)
- v = 0;
-
- dest.setSample(x + kernel.getXOrigin(), y + kernel.getYOrigin(),
- b, v);
- }
- }
- }
-
- // fill in the top border
- fillEdge(src, dest, 0, 0, src.width, top, edge);
-
- // fill in the bottom border
- fillEdge(src, dest, 0, src.height - bottom, src.width, bottom, edge);
-
- // fill in the left border
- fillEdge(src, dest, 0, top, left, regionH, edge);
-
- // fill in the right border
- fillEdge(src, dest, src.width - right, top, right, regionH, edge);
-
- return dest;
- }
-
- /**
- * Fills a range of pixels (typically at the edge of a raster) with either
- * zero values (if <code>edgeOp</code> is <code>EDGE_ZERO_FILL</code>) or the
- * corresponding pixel values from the source raster (if <code>edgeOp</code>
- * is <code>EDGE_NO_OP</code>). This utility method is called by the
- * {@link #fillEdge(Raster, WritableRaster, int, int, int, int, int)} method.
- *
- * @param src the source raster.
- * @param dest the destination raster.
- * @param x the x-coordinate of the top left pixel in the range.
- * @param y the y-coordinate of the top left pixel in the range.
- * @param w the width of the pixel range.
- * @param h the height of the pixel range.
- * @param edgeOp indicates how to determine the values for the range
- * (either {@link #EDGE_ZERO_FILL} or {@link #EDGE_NO_OP}).
- */
- private void fillEdge(Raster src, WritableRaster dest, int x, int y, int w,
- int h, int edgeOp)
- {
- if (w <= 0)
- return;
- if (h <= 0)
- return;
- if (edgeOp == EDGE_ZERO_FILL) // fill region with zeroes
- {
- float[] zeros = new float[src.getNumBands() * w * h];
- dest.setPixels(x, y, w, h, zeros);
- }
- else // copy pixels from source
- {
- float[] pixels = new float[src.getNumBands() * w * h];
- src.getPixels(x, y, w, h, pixels);
- dest.setPixels(x, y, w, h, pixels);
- }
- }
-
- /* (non-Javadoc)
- * @see java.awt.image.RasterOp#createCompatibleDestRaster(java.awt.image.Raster)
- */
- public WritableRaster createCompatibleDestRaster(Raster src)
- {
- return src.createCompatibleWritableRaster();
- }
-
- /* (non-Javadoc)
- * @see java.awt.image.BufferedImageOp#getBounds2D(java.awt.image.BufferedImage)
- */
- public final Rectangle2D getBounds2D(BufferedImage src)
- {
- return src.getRaster().getBounds();
- }
-
- /* (non-Javadoc)
- * @see java.awt.image.RasterOp#getBounds2D(java.awt.image.Raster)
- */
- public final Rectangle2D getBounds2D(Raster src)
- {
- return src.getBounds();
- }
-
- /**
- * Returns the corresponding destination point for a source point. Because
- * this is not a geometric operation, the destination and source points will
- * be identical.
- *
- * @param src The source point.
- * @param dst The transformed destination point.
- * @return The transformed destination point.
- */
- public final Point2D getPoint2D(Point2D src, Point2D dst)
- {
- if (dst == null) return (Point2D)src.clone();
- dst.setLocation(src);
- return dst;
- }
-}
diff --git a/libjava/classpath/java/awt/image/CropImageFilter.java b/libjava/classpath/java/awt/image/CropImageFilter.java
deleted file mode 100644
index 4d8fb62..0000000
--- a/libjava/classpath/java/awt/image/CropImageFilter.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/* CropImageFilter.java -- Java class for cropping image filter
- Copyright (C) 1999, 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-import java.awt.Rectangle;
-import java.util.Hashtable;
-
-/**
- * Currently this filter does almost nothing and needs to be implemented.
- *
- * @author C. Brian Jones (cbj@gnu.org)
- */
-public class CropImageFilter extends ImageFilter
-{
- int x;
- int y;
- int width;
- int height;
-
- /**
- * Construct a new <code>CropImageFilter</code> instance.
- *
- * @param x the x-coordinate location of the top-left of the cropped rectangle
- * @param y the y-coordinate location of the top-left of the cropped rectangle
- * @param width the width of the cropped rectangle
- * @param height the height of the cropped rectangle
- */
- public CropImageFilter(int x, int y, int width, int height) {
- this.x = x;
- this.y = y;
- this.width = width;
- this.height = height;
- }
-
- /**
- * An <code>ImageProducer</code> indicates the size of the image
- * being produced using this method. This filter overrides this
- * method in order to set the dimentions to the size of the
- * cropped rectangle instead of the size of the image.
- *
- * @param width the width of the image
- * @param height the height of the image
- */
- public void setDimensions(int width, int height)
- {
- if (consumer != null)
- consumer.setDimensions(this.width, this.height);
- }
-
- /**
- * An <code>ImageProducer</code> can set a list of properties
- * associated with this image by using this method.
- * <br>
- * FIXME - What property is set for this class?
- *
- * @param props the list of properties associated with this image
- */
- public void setProperties(Hashtable<?, ?> props)
- {
- Hashtable<Object, Object> prop2 = (Hashtable<Object, Object>) props;
- prop2.put("filters", "CropImageFilter");
- if (consumer != null)
- consumer.setProperties(prop2);
- }
-
- /**
- * This function delivers a rectangle of pixels where any
- * pixel(m,n) is stored in the array as a <code>byte</code> at
- * index (n * scansize + m + offset).
- *
- * @param x the x coordinate of the rectangle
- * @param y the y coordinate of the rectangle
- * @param w the width of the rectangle
- * @param h the height of the rectangle
- * @param model the <code>ColorModel</code> used to translate the pixels
- * @param pixels the array of pixel values
- * @param offset the index of the first pixels in the <code>pixels</code> array
- * @param scansize the width to use in extracting pixels from the <code>pixels</code> array
- */
- public void setPixels(int x, int y, int w, int h,
- ColorModel model, byte[] pixels, int offset, int scansize)
- {
- Rectangle filterBounds = new Rectangle(this.x, this.y,
- this.width, this.height);
- Rectangle pixelBounds = new Rectangle(x, y, w, h);
-
- if (filterBounds.intersects(pixelBounds))
- {
- Rectangle bounds = filterBounds.intersection(pixelBounds);
-
- byte[] cropped = new byte[bounds.width * bounds.height];
- for (int i = 0; i < bounds.height; i++)
- {
- int start = (bounds.y - pixelBounds.y + i) * scansize + offset;
-
- for (int j = 0; j < bounds.width; j++)
- cropped[i * bounds.width + j] = pixels[start + bounds.x + j];
- }
-
- if (consumer != null)
- consumer.setPixels(0, 0,
- bounds.width, bounds.height,
- model, cropped, 0, bounds.width);
- }
- }
-
- /**
- * This function delivers a rectangle of pixels where any
- * pixel(m,n) is stored in the array as an <code>int</code> at
- * index (n * scansize + m + offset).
- *
- * @param x the x coordinate of the rectangle
- * @param y the y coordinate of the rectangle
- * @param w the width of the rectangle
- * @param h the height of the rectangle
- * @param model the <code>ColorModel</code> used to translate the pixels
- * @param pixels the array of pixel values
- * @param offset the index of the first pixels in the <code>pixels</code> array
- * @param scansize the width to use in extracting pixels from the <code>pixels</code> array
- */
- public void setPixels(int x, int y, int w, int h,
- ColorModel model, int[] pixels, int offset, int scansize)
- {
- Rectangle filterBounds = new Rectangle(this.x, this.y,
- this.width, this.height);
- Rectangle pixelBounds = new Rectangle(x, y, w, h);
-
- if (filterBounds.intersects(pixelBounds))
- {
- Rectangle bounds = filterBounds.intersection(pixelBounds);
-
- int[] cropped = new int[bounds.width * bounds.height];
- for (int i = 0; i < bounds.height; i++)
- {
- int start = (bounds.y - pixelBounds.y + i) * scansize + offset;
-
- for (int j = 0; j < bounds.width; j++)
- cropped[i * bounds.width + j] = pixels[start + bounds.x + j];
- }
-
- if (consumer != null)
- consumer.setPixels(0, 0,
- bounds.width, bounds.height,
- model, cropped, 0, bounds.width);
- }
- }
-
-}
diff --git a/libjava/classpath/java/awt/image/DataBuffer.java b/libjava/classpath/java/awt/image/DataBuffer.java
deleted file mode 100644
index 78bc75b..0000000
--- a/libjava/classpath/java/awt/image/DataBuffer.java
+++ /dev/null
@@ -1,437 +0,0 @@
-/* Copyright (C) 2000, 2002, 2005 Free Software Foundation
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package java.awt.image;
-
-/**
- * Class that manages arrays of data elements. A data buffer consists
- * of one or more banks. A bank is a continuous region of data
- * elements.
- *
- * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
- */
-public abstract class DataBuffer
-{
- /**
- * A constant representing a data type that uses <code>byte</code> primitives
- * as the storage unit.
- */
- public static final int TYPE_BYTE = 0;
-
- /**
- * A constant representing a data type that uses <code>short</code>
- * primitives as the storage unit.
- */
- public static final int TYPE_USHORT = 1;
-
- /**
- * A constant representing a data type that uses <code>short</code>
- * primitives as the storage unit.
- */
- public static final int TYPE_SHORT = 2;
-
- /**
- * A constant representing a data type that uses <code>int</code>
- * primitives as the storage unit.
- */
- public static final int TYPE_INT = 3;
-
- /**
- * A constant representing a data type that uses <code>float</code>
- * primitives as the storage unit.
- */
- public static final int TYPE_FLOAT = 4;
-
- /**
- * A constant representing a data type that uses <code>double</code>
- * primitives as the storage unit.
- */
- public static final int TYPE_DOUBLE = 5;
-
- /**
- * A constant representing an undefined data type.
- */
- public static final int TYPE_UNDEFINED = 32;
-
- /** The type of the data elements stored in the data buffer. */
- protected int dataType;
-
- /** The number of banks in this buffer. */
- protected int banks = 1;
-
- /** Offset into the default (0'th) bank). */
- protected int offset; // FIXME: Is offsets[0] always mirrored in offset?
-
- /** The size of the banks. */
- protected int size;
-
- /** Offset into each bank. */
- protected int[] offsets;
-
- /**
- * Creates a new <code>DataBuffer</code> with the specified data type and
- * size. The <code>dataType</code> should be one of the constants
- * {@link #TYPE_BYTE}, {@link #TYPE_SHORT}, {@link #TYPE_USHORT},
- * {@link #TYPE_INT}, {@link #TYPE_FLOAT} and {@link #TYPE_DOUBLE}.
- * <p>
- * The physical (array-based) storage is allocated by a subclass.
- *
- * @param dataType the data type.
- * @param size the number of elements in the buffer.
- */
- protected DataBuffer(int dataType, int size)
- {
- this(dataType, size, 1);
- }
-
- /**
- * Creates a new <code>DataBuffer</code> with the specified data type,
- * size and number of banks. The <code>dataType</code> should be one of
- * the constants {@link #TYPE_BYTE}, {@link #TYPE_SHORT},
- * {@link #TYPE_USHORT}, {@link #TYPE_INT}, {@link #TYPE_FLOAT} and
- * {@link #TYPE_DOUBLE}.
- * <p>
- * The physical (array-based) storage is allocated by a subclass.
- *
- * @param dataType the data type.
- * @param size the number of elements in the buffer.
- * @param numBanks the number of data banks.
- */
- protected DataBuffer(int dataType, int size, int numBanks) {
- this(dataType, size, numBanks, 0);
- }
-
- /**
- * Creates a new <code>DataBuffer</code> with the specified data type,
- * size and number of banks. An offset (which applies to all banks) is
- * also specified. The <code>dataType</code> should be one of
- * the constants {@link #TYPE_BYTE}, {@link #TYPE_SHORT},
- * {@link #TYPE_USHORT}, {@link #TYPE_INT}, {@link #TYPE_FLOAT} and
- * {@link #TYPE_DOUBLE}.
- * <p>
- * The physical (array-based) storage is allocated by a subclass.
- *
- * @param dataType the data type.
- * @param size the number of elements in the buffer.
- * @param numBanks the number of data banks.
- * @param offset the offset to the first element for all banks.
- */
- protected DataBuffer(int dataType, int size, int numBanks, int offset) {
- banks = numBanks;
- this.dataType = dataType;
- this.size = size;
- this.offset = offset;
-
- offsets = new int[ numBanks ];
- for(int i = 0; i < numBanks; i++ )
- offsets[i] = offset;
- }
-
- /**
- * Creates a new <code>DataBuffer</code> with the specified data type,
- * size and number of banks. An offset (which applies to all banks) is
- * also specified. The <code>dataType</code> should be one of
- * the constants {@link #TYPE_BYTE}, {@link #TYPE_SHORT},
- * {@link #TYPE_USHORT}, {@link #TYPE_INT}, {@link #TYPE_FLOAT} and
- * {@link #TYPE_DOUBLE}.
- * <p>
- * The physical (array-based) storage is allocated by a subclass.
- *
- * @param dataType the data type.
- * @param size the number of elements in the buffer.
- * @param numBanks the number of data banks.
- * @param offsets the offsets to the first element for all banks.
- *
- * @throws ArrayIndexOutOfBoundsException if
- * <code>numBanks != offsets.length</code>.
- */
- protected DataBuffer(int dataType, int size, int numBanks, int[] offsets) {
- if (numBanks != offsets.length)
- throw new ArrayIndexOutOfBoundsException();
-
- this.dataType = dataType;
- this.size = size;
- banks = numBanks;
- this.offsets = offsets;
-
- offset = offsets[0];
- }
-
- /**
- * Returns the size (number of bits) of the specified data type. Valid types
- * are defined by the constants {@link #TYPE_BYTE}, {@link #TYPE_SHORT},
- * {@link #TYPE_USHORT}, {@link #TYPE_INT}, {@link #TYPE_FLOAT} and
- * {@link #TYPE_DOUBLE}.
- *
- * @param dataType the data type.
- * @return The number of bits for the specified data type.
- * @throws IllegalArgumentException if <code>dataType < 0</code> or
- * <code>dataType > TYPE_DOUBLE</code>.
- */
- public static int getDataTypeSize(int dataType) {
- // Maybe this should be a lookup table instead.
- switch (dataType)
- {
- case TYPE_BYTE:
- return 8;
- case TYPE_USHORT:
- case TYPE_SHORT:
- return 16;
- case TYPE_INT:
- case TYPE_FLOAT:
- return 32;
- case TYPE_DOUBLE:
- return 64;
- default:
- throw new IllegalArgumentException();
- }
- }
-
- /**
- * Returns the type of the data elements in the data buffer. Valid types
- * are defined by the constants {@link #TYPE_BYTE}, {@link #TYPE_SHORT},
- * {@link #TYPE_USHORT}, {@link #TYPE_INT}, {@link #TYPE_FLOAT} and
- * {@link #TYPE_DOUBLE}.
- *
- * @return The type.
- */
- public int getDataType()
- {
- return dataType;
- }
-
- /**
- * Returns the size of the data buffer.
- *
- * @return The size.
- */
- public int getSize()
- {
- return size;
- }
-
- /**
- * Returns the element offset for the first data bank.
- *
- * @return The element offset.
- */
- public int getOffset()
- {
- return offset;
- }
-
- /**
- * Returns the offsets for all the data banks used by this
- * <code>DataBuffer</code>.
- *
- * @return The offsets.
- */
- public int[] getOffsets()
- {
- if (offsets == null)
- {
- // is this necessary?
- offsets = new int[1];
- offsets[0] = offset;
- }
- return offsets;
- }
-
- /**
- * Returns the number of data banks for this <code>DataBuffer</code>.
- * @return The number of data banks.
- */
- public int getNumBanks()
- {
- return banks;
- }
-
- /**
- * Returns an element from the first data bank. The offset (specified in
- * the constructor) is added to <code>i</code> before accessing the
- * underlying data array.
- *
- * @param i the element index.
- * @return The element.
- */
- public int getElem(int i)
- {
- return getElem(0, i);
- }
-
- /**
- * Returns an element from a particular data bank. The offset (specified in
- * the constructor) is added to <code>i</code> before accessing the
- * underlying data array.
- *
- * @param bank the bank index.
- * @param i the element index.
- * @return The element.
- */
- public abstract int getElem(int bank, int i);
-
- /**
- * Sets an element in the first data bank. The offset (specified in the
- * constructor) is added to <code>i</code> before updating the underlying
- * data array.
- *
- * @param i the element index.
- * @param val the new element value.
- */
- public void setElem(int i, int val)
- {
- setElem(0, i, val);
- }
-
- /**
- * Sets an element in a particular data bank. The offset (specified in the
- * constructor) is added to <code>i</code> before updating the underlying
- * data array.
- *
- * @param bank the data bank index.
- * @param i the element index.
- * @param val the new element value.
- */
- public abstract void setElem(int bank, int i, int val);
-
- /**
- * Returns an element from the first data bank, converted to a
- * <code>float</code>. The offset (specified in the constructor) is added
- * to <code>i</code> before accessing the underlying data array.
- *
- * @param i the element index.
- * @return The element.
- */
- public float getElemFloat(int i)
- {
- return getElem(i);
- }
-
- /**
- * Returns an element from a particular data bank, converted to a
- * <code>float</code>. The offset (specified in the constructor) is
- * added to <code>i</code> before accessing the underlying data array.
- *
- * @param bank the bank index.
- * @param i the element index.
- * @return The element.
- */
- public float getElemFloat(int bank, int i)
- {
- return getElem(bank, i);
- }
-
- /**
- * Sets an element in the first data bank. The offset (specified in the
- * constructor) is added to <code>i</code> before updating the underlying
- * data array.
- *
- * @param i the element index.
- * @param val the new element value.
- */
- public void setElemFloat(int i, float val)
- {
- setElem(i, (int) val);
- }
-
- /**
- * Sets an element in a particular data bank. The offset (specified in the
- * constructor) is added to <code>i</code> before updating the underlying
- * data array.
- *
- * @param bank the data bank index.
- * @param i the element index.
- * @param val the new element value.
- */
- public void setElemFloat(int bank, int i, float val)
- {
- setElem(bank, i, (int) val);
- }
-
- /**
- * Returns an element from the first data bank, converted to a
- * <code>double</code>. The offset (specified in the constructor) is added
- * to <code>i</code> before accessing the underlying data array.
- *
- * @param i the element index.
- * @return The element.
- */
- public double getElemDouble(int i)
- {
- return getElem(i);
- }
-
- /**
- * Returns an element from a particular data bank, converted to a
- * <code>double</code>. The offset (specified in the constructor) is
- * added to <code>i</code> before accessing the underlying data array.
- *
- * @param bank the bank index.
- * @param i the element index.
- * @return The element.
- */
- public double getElemDouble(int bank, int i)
- {
- return getElem(bank, i);
- }
-
- /**
- * Sets an element in the first data bank. The offset (specified in the
- * constructor) is added to <code>i</code> before updating the underlying
- * data array.
- *
- * @param i the element index.
- * @param val the new element value.
- */
- public void setElemDouble(int i, double val)
- {
- setElem(i, (int) val);
- }
-
- /**
- * Sets an element in a particular data bank. The offset (specified in the
- * constructor) is added to <code>i</code> before updating the underlying
- * data array.
- *
- * @param bank the data bank index.
- * @param i the element index.
- * @param val the new element value.
- */
- public void setElemDouble(int bank, int i, double val)
- {
- setElem(bank, i, (int) val);
- }
-}
diff --git a/libjava/classpath/java/awt/image/DataBufferByte.java b/libjava/classpath/java/awt/image/DataBufferByte.java
deleted file mode 100644
index 01364b0..0000000
--- a/libjava/classpath/java/awt/image/DataBufferByte.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/* Copyright (C) 2000, 2002 Free Software Foundation
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package java.awt.image;
-
-/* This is one of several classes that are nearly identical. Maybe we
- should have a central template and generate all these files. This
- is one of the cases where templates or macros would have been
- useful to have in Java.
-
- This file has been created using search-replace. My only fear is
- that these classes will grow out-of-sync as of a result of changes
- that are not propagated to the other files. As always, mirroring
- code is a maintenance nightmare. */
-
-/**
- * A {@link DataBuffer} that uses an array of <code>byte</code> primitives
- * to represent each of its banks.
- *
- * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
- */
-public final class DataBufferByte extends DataBuffer
-{
- private byte[] data;
- private byte[][] bankData;
-
- /**
- * Creates a new data buffer with a single data bank containing the
- * specified number of <code>byte</code> elements.
- *
- * @param size the number of elements in the data bank.
- */
- public DataBufferByte(int size)
- {
- super(TYPE_BYTE, size, 1, 0);
- bankData = new byte[1][];
- data = new byte[size];
- bankData[0] = data;
- }
-
- /**
- * Creates a new data buffer with the specified number of data banks,
- * each containing the specified number of <code>byte</code> elements.
- *
- * @param size the number of elements in the data bank.
- * @param numBanks the number of data banks.
- */
- public DataBufferByte(int size, int numBanks)
- {
- super(TYPE_BYTE, size, numBanks);
- bankData = new byte[numBanks][size];
- data = bankData[0];
- }
-
- /**
- * Creates a new data buffer backed by the specified data bank.
- * <p>
- * Note: there is no exception when <code>dataArray</code> is
- * <code>null</code>, but in that case an exception will be thrown
- * later if you attempt to access the data buffer.
- *
- * @param dataArray the data bank.
- * @param size the number of elements in the data bank.
- */
- public DataBufferByte(byte[] dataArray, int size)
- {
- super(TYPE_BYTE, size, 1, 0);
- bankData = new byte[1][];
- data = dataArray;
- bankData[0] = data;
- }
-
- /**
- * Creates a new data buffer backed by the specified data bank, with
- * the specified offset to the first element.
- * <p>
- * Note: there is no exception when <code>dataArray</code> is
- * <code>null</code>, but in that case an exception will be thrown
- * later if you attempt to access the data buffer.
- *
- * @param dataArray the data bank.
- * @param size the number of elements in the data bank.
- * @param offset the offset to the first element in the array.
- */
- public DataBufferByte(byte[] dataArray, int size, int offset)
- {
- super(TYPE_BYTE, size, 1, offset);
- bankData = new byte[1][];
- data = dataArray;
- bankData[0] = data;
- }
-
- /**
- * Creates a new data buffer backed by the specified data banks.
- *
- * @param dataArray the data banks.
- * @param size the number of elements in the data bank.
- *
- * @throws NullPointerException if <code>dataArray</code> is
- * <code>null</code>.
- */
- public DataBufferByte(byte[][] dataArray, int size)
- {
- super(TYPE_BYTE, size, dataArray.length);
- bankData = dataArray;
- data = bankData[0];
- }
-
- /**
- * Creates a new data buffer backed by the specified data banks, with
- * the specified offsets to the first element in each bank.
- *
- * @param dataArray the data banks.
- * @param size the number of elements in the data bank.
- * @param offsets the offsets to the first element in each data bank.
- *
- * @throws NullPointerException if <code>dataArray</code> is
- * <code>null</code>.
- */
- public DataBufferByte(byte[][] dataArray, int size, int[] offsets)
- {
- super(TYPE_BYTE, size, dataArray.length, offsets);
- bankData = dataArray;
- data = bankData[0];
- }
-
- /**
- * Returns the first data bank.
- *
- * @return The first data bank.
- */
- public byte[] getData()
- {
- return data;
- }
-
- /**
- * Returns a data bank.
- *
- * @param bank the bank index.
- * @return A data bank.
- */
- public byte[] getData(int bank)
- {
- return bankData[bank];
- }
-
- /**
- * Returns the array underlying this <code>DataBuffer</code>.
- *
- * @return The data banks.
- */
- public byte[][] getBankData()
- {
- return bankData;
- }
-
- /**
- * Returns an element from the first data bank. The offset (specified in
- * the constructor) is added to <code>i</code> before accessing the
- * underlying data array.
- *
- * @param i the element index.
- * @return The element.
- */
- public int getElem(int i)
- {
- return data[i+offset] & 0xff; // get unsigned byte as int
- }
-
- /**
- * Returns an element from a particular data bank. The offset (specified in
- * the constructor) is added to <code>i</code> before accessing the
- * underlying data array.
- *
- * @param bank the bank index.
- * @param i the element index.
- * @return The element.
- */
- public int getElem(int bank, int i)
- {
- // get unsigned byte as int
- return bankData[bank][i+offsets[bank]] & 0xff;
- }
-
- /**
- * Sets an element in the first data bank. The offset (specified in the
- * constructor) is added to <code>i</code> before updating the underlying
- * data array.
- *
- * @param i the element index.
- * @param val the new element value.
- */
- public void setElem(int i, int val)
- {
- data[i+offset] = (byte) val;
- }
-
- /**
- * Sets an element in a particular data bank. The offset (specified in the
- * constructor) is added to <code>i</code> before updating the underlying
- * data array.
- *
- * @param bank the data bank index.
- * @param i the element index.
- * @param val the new element value.
- */
- public void setElem(int bank, int i, int val)
- {
- bankData[bank][i+offsets[bank]] = (byte) val;
- }
-}
diff --git a/libjava/classpath/java/awt/image/DataBufferDouble.java b/libjava/classpath/java/awt/image/DataBufferDouble.java
deleted file mode 100644
index 31c5ebd..0000000
--- a/libjava/classpath/java/awt/image/DataBufferDouble.java
+++ /dev/null
@@ -1,288 +0,0 @@
-/* Copyright (C) 2004, 2005 Free Software Foundation
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package java.awt.image;
-
-/* This is one of several classes that are nearly identical. Maybe we
- should have a central template and generate all these files. This
- is one of the cases where templates or macros would have been
- useful to have in Java.
-
- This file has been created using search-replace. My only fear is
- that these classes will grow out-of-sync as of a result of changes
- that are not propagated to the other files. As always, mirroring
- code is a maintenance nightmare. */
-
-/**
- * A {@link DataBuffer} that uses an array of <code>double</code> primitives
- * to represent each of its banks.
- *
- * @since 1.4
- *
- * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
- * @author Sascha Brawer (brawer@dandelis.ch)
- */
-public final class DataBufferDouble
- extends DataBuffer
-{
- private double[] data;
- private double[][] bankData;
-
- /**
- * Creates a new data buffer with a single data bank containing the
- * specified number of <code>double</code> elements.
- *
- * @param size the number of elements in the data bank.
- */
- public DataBufferDouble(int size)
- {
- super(TYPE_DOUBLE, size, 1, 0);
- bankData = new double[1][];
- data = new double[size];
- bankData[0] = data;
- }
-
- /**
- * Creates a new data buffer with the specified number of data banks,
- * each containing the specified number of <code>double</code> elements.
- *
- * @param size the number of elements in the data bank.
- * @param numBanks the number of data banks.
- */
- public DataBufferDouble(int size, int numBanks)
- {
- super(TYPE_DOUBLE, size, numBanks);
- bankData = new double[numBanks][size];
- data = bankData[0];
- }
-
- /**
- * Creates a new data buffer backed by the specified data bank.
- * <p>
- * Note: there is no exception when <code>dataArray</code> is
- * <code>null</code>, but in that case an exception will be thrown
- * later if you attempt to access the data buffer.
- *
- * @param dataArray the data bank.
- * @param size the number of elements in the data bank.
- */
- public DataBufferDouble(double[] dataArray, int size)
- {
- super(TYPE_DOUBLE, size, 1, 0);
- bankData = new double[1][];
- data = dataArray;
- bankData[0] = data;
- }
-
- /**
- * Creates a new data buffer backed by the specified data bank, with
- * the specified offset to the first element.
- * <p>
- * Note: there is no exception when <code>dataArray</code> is
- * <code>null</code>, but in that case an exception will be thrown
- * later if you attempt to access the data buffer.
- *
- * @param dataArray the data bank.
- * @param size the number of elements in the data bank.
- * @param offset the offset to the first element in the array.
- */
- public DataBufferDouble(double[] dataArray, int size, int offset)
- {
- super(TYPE_DOUBLE, size, 1, offset);
- bankData = new double[1][];
- data = dataArray;
- bankData[0] = data;
- }
-
- /**
- * Creates a new data buffer backed by the specified data banks.
- *
- * @param dataArray the data banks.
- * @param size the number of elements in the data bank.
- *
- * @throws NullPointerException if <code>dataArray</code> is
- * <code>null</code>.
- */
- public DataBufferDouble(double[][] dataArray, int size)
- {
- super(TYPE_DOUBLE, size, dataArray.length);
- bankData = dataArray;
- data = bankData[0];
- }
-
- /**
- * Creates a new data buffer backed by the specified data banks, with
- * the specified offsets to the first element in each bank.
- *
- * @param dataArray the data banks.
- * @param size the number of elements in the data bank.
- * @param offsets the offsets to the first element in each data bank.
- *
- * @throws NullPointerException if <code>dataArray</code> is
- * <code>null</code>.
- */
- public DataBufferDouble(double[][] dataArray, int size, int[] offsets)
- {
- super(TYPE_DOUBLE, size, dataArray.length, offsets);
- bankData = dataArray;
- data = bankData[0];
- }
-
- /**
- * Returns the first data bank.
- *
- * @return The first data bank.
- */
- public double[] getData()
- {
- return data;
- }
-
- /**
- * Returns a data bank.
- *
- * @param bank the bank index.
- * @return A data bank.
- */
- public double[] getData(int bank)
- {
- return bankData[bank];
- }
-
- /**
- * Returns the array underlying this <code>DataBuffer</code>.
- *
- * @return The data banks.
- */
- public double[][] getBankData()
- {
- return bankData;
- }
-
- /**
- * Returns an element from the first data bank. The offset (specified in
- * the constructor) is added to <code>i</code> before accessing the
- * underlying data array.
- *
- * @param i the element index.
- * @return The element.
- */
- public int getElem(int i)
- {
- return (int) data[i+offset];
- }
-
- /**
- * Returns an element from a particular data bank. The offset (specified in
- * the constructor) is added to <code>i</code> before accessing the
- * underlying data array.
- *
- * @param bank the bank index.
- * @param i the element index.
- * @return The element.
- */
- public int getElem(int bank, int i)
- {
- return (int) bankData[bank][i+offsets[bank]];
- }
-
- /**
- * Sets an element in the first data bank. The offset (specified in the
- * constructor) is added to <code>i</code> before updating the underlying
- * data array.
- *
- * @param i the element index.
- * @param val the new element value.
- */
- public void setElem(int i, int val)
- {
- data[i+offset] = val;
- }
-
- /**
- * Sets an element in a particular data bank. The offset (specified in the
- * constructor) is added to <code>i</code> before updating the underlying
- * data array.
- *
- * @param bank the data bank index.
- * @param i the element index.
- * @param val the new element value.
- */
- public void setElem(int bank, int i, int val)
- {
- bankData[bank][i+offsets[bank]] = val;
- }
-
- public float getElemFloat(int i)
- {
- return (float) data[i+offset];
- }
-
- public float getElemFloat(int bank, int i)
- {
- return (float) bankData[bank][i+offsets[bank]];
- }
-
- public void setElemFloat(int i, float val)
- {
- data[i+offset] = val;
- }
-
- public void setElemFloat(int bank, int i, float val)
- {
- bankData[bank][i+offsets[bank]] = val;
- }
-
- public double getElemDouble(int i)
- {
- return data[i + offset];
- }
-
- public double getElemDouble(int bank, int i)
- {
- return bankData[bank][i + offsets[bank]];
- }
-
- public void setElemDouble(int i, double val)
- {
- data[i + offset] = val;
- }
-
- public void setElemDouble(int bank, int i, double val)
- {
- bankData[bank][i + offsets[bank]] = val;
- }
-}
diff --git a/libjava/classpath/java/awt/image/DataBufferFloat.java b/libjava/classpath/java/awt/image/DataBufferFloat.java
deleted file mode 100644
index 44a0a38..0000000
--- a/libjava/classpath/java/awt/image/DataBufferFloat.java
+++ /dev/null
@@ -1,286 +0,0 @@
-/* Copyright (C) 2004, 2005 Free Software Foundation
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package java.awt.image;
-
-/* This is one of several classes that are nearly identical. Maybe we
- should have a central template and generate all these files. This
- is one of the cases where templates or macros would have been
- useful to have in Java.
-
- This file has been created using search-replace. My only fear is
- that these classes will grow out-of-sync as of a result of changes
- that are not propagated to the other files. As always, mirroring
- code is a maintenance nightmare. */
-
-/**
- * A {@link DataBuffer} that uses an array of <code>float</code> primitives
- * to represent each of its banks.
- *
- * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
- * @author Sascha Brawer (brawer@dandelis.ch)
- */
-public final class DataBufferFloat
- extends DataBuffer
-{
- private float[] data;
- private float[][] bankData;
-
- /**
- * Creates a new data buffer with a single data bank containing the
- * specified number of <code>float</code> elements.
- *
- * @param size the number of elements in the data bank.
- */
- public DataBufferFloat(int size)
- {
- super(TYPE_FLOAT, size, 1, 0);
- bankData = new float[1][];
- data = new float[size];
- bankData[0] = data;
- }
-
- /**
- * Creates a new data buffer with the specified number of data banks,
- * each containing the specified number of <code>float</code> elements.
- *
- * @param size the number of elements in the data bank.
- * @param numBanks the number of data banks.
- */
- public DataBufferFloat(int size, int numBanks)
- {
- super(TYPE_FLOAT, size, numBanks);
- bankData = new float[numBanks][size];
- data = bankData[0];
- }
-
- /**
- * Creates a new data buffer backed by the specified data bank.
- * <p>
- * Note: there is no exception when <code>dataArray</code> is
- * <code>null</code>, but in that case an exception will be thrown
- * later if you attempt to access the data buffer.
- *
- * @param dataArray the data bank.
- * @param size the number of elements in the data bank.
- */
- public DataBufferFloat(float[] dataArray, int size)
- {
- super(TYPE_FLOAT, size, 1, 0);
- bankData = new float[1][];
- data = dataArray;
- bankData[0] = data;
- }
-
- /**
- * Creates a new data buffer backed by the specified data bank, with
- * the specified offset to the first element.
- * <p>
- * Note: there is no exception when <code>dataArray</code> is
- * <code>null</code>, but in that case an exception will be thrown
- * later if you attempt to access the data buffer.
- *
- * @param dataArray the data bank.
- * @param size the number of elements in the data bank.
- * @param offset the offset to the first element in the array.
- */
- public DataBufferFloat(float[] dataArray, int size, int offset)
- {
- super(TYPE_FLOAT, size, 1, offset);
- bankData = new float[1][];
- data = dataArray;
- bankData[0] = data;
- }
-
- /**
- * Creates a new data buffer backed by the specified data banks.
- *
- * @param dataArray the data banks.
- * @param size the number of elements in the data bank.
- *
- * @throws NullPointerException if <code>dataArray</code> is
- * <code>null</code>.
- */
- public DataBufferFloat(float[][] dataArray, int size)
- {
- super(TYPE_FLOAT, size, dataArray.length);
- bankData = dataArray;
- data = bankData[0];
- }
-
- /**
- * Creates a new data buffer backed by the specified data banks, with
- * the specified offsets to the first element in each bank.
- *
- * @param dataArray the data banks.
- * @param size the number of elements in the data bank.
- * @param offsets the offsets to the first element in each data bank.
- *
- * @throws NullPointerException if <code>dataArray</code> is
- * <code>null</code>.
- */
- public DataBufferFloat(float[][] dataArray, int size, int[] offsets)
- {
- super(TYPE_FLOAT, size, dataArray.length, offsets);
- bankData = dataArray;
- data = bankData[0];
- }
-
- /**
- * Returns the first data bank.
- *
- * @return The first data bank.
- */
- public float[] getData()
- {
- return data;
- }
-
- /**
- * Returns a data bank.
- *
- * @param bank the bank index.
- * @return A data bank.
- */
- public float[] getData(int bank)
- {
- return bankData[bank];
- }
-
- /**
- * Returns the array underlying this <code>DataBuffer</code>.
- *
- * @return The data banks.
- */
- public float[][] getBankData()
- {
- return bankData;
- }
-
- /**
- * Returns an element from the first data bank. The offset (specified in
- * the constructor) is added to <code>i</code> before accessing the
- * underlying data array.
- *
- * @param i the element index.
- * @return The element.
- */
- public int getElem(int i)
- {
- return (int) data[i+offset];
- }
-
- /**
- * Returns an element from a particular data bank. The offset (specified in
- * the constructor) is added to <code>i</code> before accessing the
- * underlying data array.
- *
- * @param bank the bank index.
- * @param i the element index.
- * @return The element.
- */
- public int getElem(int bank, int i)
- {
- return (int) bankData[bank][i+offsets[bank]];
- }
-
- /**
- * Sets an element in the first data bank. The offset (specified in the
- * constructor) is added to <code>i</code> before updating the underlying
- * data array.
- *
- * @param i the element index.
- * @param val the new element value.
- */
- public void setElem(int i, int val)
- {
- data[i+offset] = val;
- }
-
- /**
- * Sets an element in a particular data bank. The offset (specified in the
- * constructor) is added to <code>i</code> before updating the underlying
- * data array.
- *
- * @param bank the data bank index.
- * @param i the element index.
- * @param val the new element value.
- */
- public void setElem(int bank, int i, int val)
- {
- bankData[bank][i+offsets[bank]] = val;
- }
-
- public float getElemFloat(int i)
- {
- return data[i+offset];
- }
-
- public float getElemFloat(int bank, int i)
- {
- return bankData[bank][i+offsets[bank]];
- }
-
- public void setElemFloat(int i, float val)
- {
- data[i+offset] = val;
- }
-
- public void setElemFloat(int bank, int i, float val)
- {
- bankData[bank][i+offsets[bank]] = val;
- }
-
- public double getElemDouble(int i)
- {
- return getElemFloat(i);
- }
-
- public double getElemDouble(int bank, int i)
- {
- return getElemFloat(bank, i);
- }
-
- public void setElemDouble(int i, double val)
- {
- setElemFloat(i, (float) val);
- }
-
- public void setElemDouble(int bank, int i, double val)
- {
- setElemFloat(bank, i, (float) val);
- }
-}
diff --git a/libjava/classpath/java/awt/image/DataBufferInt.java b/libjava/classpath/java/awt/image/DataBufferInt.java
deleted file mode 100644
index db9d5bc..0000000
--- a/libjava/classpath/java/awt/image/DataBufferInt.java
+++ /dev/null
@@ -1,244 +0,0 @@
-/* Copyright (C) 2000, 2002, 2005 Free Software Foundation
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package java.awt.image;
-
-/* This is one of several classes that are nearly identical. Maybe we
- should have a central template and generate all these files. This
- is one of the cases where templates or macros would have been
- useful to have in Java.
-
- This file has been created using search-replace. My only fear is
- that these classes will grow out-of-sync as of a result of changes
- that are not propagated to the other files. As always, mirroring
- code is a maintenance nightmare. */
-
-/**
- * A {@link DataBuffer} that uses an array of <code>int</code> primitives
- * to represent each of its banks.
- *
- * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
- */
-public final class DataBufferInt extends DataBuffer
-{
- private int[] data;
- private int[][] bankData;
-
- /**
- * Creates a new data buffer with a single data bank containing the
- * specified number of <code>int</code> elements.
- *
- * @param size the number of elements in the data bank.
- */
- public DataBufferInt(int size)
- {
- super(TYPE_INT, size, 1, 0);
- bankData = new int[1][];
- data = new int[size];
- bankData[0] = data;
- }
-
- /**
- * Creates a new data buffer with the specified number of data banks,
- * each containing the specified number of <code>int</code> elements.
- *
- * @param size the number of elements in the data bank.
- * @param numBanks the number of data banks.
- */
- public DataBufferInt(int size, int numBanks)
- {
- super(TYPE_INT, size, numBanks);
- bankData = new int[numBanks][size];
- data = bankData[0];
- }
-
- /**
- * Creates a new data buffer backed by the specified data bank.
- * <p>
- * Note: there is no exception when <code>dataArray</code> is
- * <code>null</code>, but in that case an exception will be thrown
- * later if you attempt to access the data buffer.
- *
- * @param dataArray the data bank.
- * @param size the number of elements in the data bank.
- */
- public DataBufferInt(int[] dataArray, int size)
- {
- super(TYPE_INT, size, 1, 0);
- bankData = new int[1][];
- data = dataArray;
- bankData[0] = data;
- }
-
- /**
- * Creates a new data buffer backed by the specified data bank, with
- * the specified offset to the first element.
- * <p>
- * Note: there is no exception when <code>dataArray</code> is
- * <code>null</code>, but in that case an exception will be thrown
- * later if you attempt to access the data buffer.
- *
- * @param dataArray the data bank.
- * @param size the number of elements in the data bank.
- * @param offset the offset to the first element in the array.
- */
- public DataBufferInt(int[] dataArray, int size, int offset)
- {
- super(TYPE_INT, size, 1, offset);
- bankData = new int[1][];
- data = dataArray;
- bankData[0] = data;
- }
-
- /**
- * Creates a new data buffer backed by the specified data banks.
- *
- * @param dataArray the data banks.
- * @param size the number of elements in the data bank.
- *
- * @throws NullPointerException if <code>dataArray</code> is
- * <code>null</code>.
- */
- public DataBufferInt(int[][] dataArray, int size)
- {
- super(TYPE_INT, size, dataArray.length);
- bankData = dataArray;
- data = bankData[0];
- }
-
- /**
- * Creates a new data buffer backed by the specified data banks, with
- * the specified offsets to the first element in each bank.
- *
- * @param dataArray the data banks.
- * @param size the number of elements in the data bank.
- * @param offsets the offsets to the first element in each data bank.
- *
- * @throws NullPointerException if <code>dataArray</code> is
- * <code>null</code>.
- */
- public DataBufferInt(int[][] dataArray, int size, int[] offsets)
- {
- super(TYPE_INT, size, dataArray.length, offsets);
- bankData = dataArray;
- data = bankData[0];
- }
-
- /**
- * Returns the first data bank.
- *
- * @return The first data bank.
- */
- public int[] getData()
- {
- return data;
- }
-
- /**
- * Returns a data bank.
- *
- * @param bank the bank index.
- * @return A data bank.
- */
- public int[] getData(int bank)
- {
- return bankData[bank];
- }
-
- /**
- * Returns the array underlying this <code>DataBuffer</code>.
- *
- * @return The data banks.
- */
- public int[][] getBankData()
- {
- return bankData;
- }
-
- /**
- * Returns an element from the first data bank. The <code>offset</code> is
- * added to the specified index before accessing the underlying data array.
- *
- * @param i the element index.
- * @return The element.
- */
- public int getElem(int i)
- {
- return data[i+offset];
- }
-
- /**
- * Returns an element from a particular data bank. The <code>offset</code>
- * is added to the specified index before accessing the underlying data
- * array.
- *
- * @param bank the bank index.
- * @param i the element index.
- * @return The element.
- */
- public int getElem(int bank, int i)
- {
- // get unsigned int as int
- return bankData[bank][i+offsets[bank]];
- }
-
- /**
- * Sets an element in the first data bank. The offset (specified in the
- * constructor) is added to <code>i</code> before updating the underlying
- * data array.
- *
- * @param i the element index.
- * @param val the new element value.
- */
- public void setElem(int i, int val)
- {
- data[i+offset] = val;
- }
-
- /**
- * Sets an element in a particular data bank. The offset (specified in the
- * constructor) is added to <code>i</code> before updating the underlying
- * data array.
- *
- * @param bank the data bank index.
- * @param i the element index.
- * @param val the new element value.
- */
- public void setElem(int bank, int i, int val)
- {
- bankData[bank][i+offsets[bank]] = val;
- }
-}
diff --git a/libjava/classpath/java/awt/image/DataBufferShort.java b/libjava/classpath/java/awt/image/DataBufferShort.java
deleted file mode 100644
index 2156d75..0000000
--- a/libjava/classpath/java/awt/image/DataBufferShort.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/* DataBufferShort.java --
- Copyright (C) 2004, 2005 Free Software Foundation
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package java.awt.image;
-
-/* This is one of several classes that are nearly identical. Maybe we
- should have a central template and generate all these files. This
- is one of the cases where templates or macros would have been
- useful to have in Java.
-
- This file has been created using search-replace. My only fear is
- that these classes will grow out-of-sync as of a result of changes
- that are not propagated to the other files. As always, mirroring
- code is a maintenance nightmare. */
-
-/**
- * A {@link DataBuffer} that uses an array of <code>short</code> primitives
- * to represent each of its banks.
- *
- * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
- */
-public final class DataBufferShort extends DataBuffer
-{
- private short[] data;
- private short[][] bankData;
-
- /**
- * Creates a new data buffer with a single data bank containing the
- * specified number of <code>short</code> elements.
- *
- * @param size the number of elements in the data bank.
- */
- public DataBufferShort(int size)
- {
- super(TYPE_SHORT, size, 1, 0);
- bankData = new short[1][];
- data = new short[size];
- bankData[0] = data;
- }
-
- /**
- * Creates a new data buffer with the specified number of data banks,
- * each containing the specified number of <code>short</code> elements.
- *
- * @param size the number of elements in the data bank.
- * @param numBanks the number of data banks.
- */
- public DataBufferShort(int size, int numBanks)
- {
- super(TYPE_SHORT, size, numBanks);
- bankData = new short[numBanks][size];
- data = bankData[0];
- }
-
- /**
- * Creates a new data buffer backed by the specified data bank.
- * <p>
- * Note: there is no exception when <code>dataArray</code> is
- * <code>null</code>, but in that case an exception will be thrown
- * later if you attempt to access the data buffer.
- *
- * @param dataArray the data bank.
- * @param size the number of elements in the data bank.
- */
- public DataBufferShort(short[] dataArray, int size)
- {
- super(TYPE_SHORT, size, 1, 0);
- bankData = new short[1][];
- data = dataArray;
- bankData[0] = data;
- }
-
- /**
- * Creates a new data buffer backed by the specified data bank, with
- * the specified offset to the first element.
- * <p>
- * Note: there is no exception when <code>dataArray</code> is
- * <code>null</code>, but in that case an exception will be thrown
- * later if you attempt to access the data buffer.
- *
- * @param dataArray the data bank.
- * @param size the number of elements in the data bank.
- * @param offset the offset to the first element in the array.
- */
- public DataBufferShort(short[] dataArray, int size, int offset)
- {
- super(TYPE_SHORT, size, 1, offset);
- bankData = new short[1][];
- data = dataArray;
- bankData[0] = data;
- }
-
- /**
- * Creates a new data buffer backed by the specified data banks.
- *
- * @param dataArray the data banks.
- * @param size the number of elements in the data bank.
- *
- * @throws NullPointerException if <code>dataArray</code> is
- * <code>null</code>.
- */
- public DataBufferShort(short[][] dataArray, int size)
- {
- super(TYPE_SHORT, size, dataArray.length);
- bankData = dataArray;
- data = bankData[0];
- }
-
- /**
- * Creates a new data buffer backed by the specified data banks, with
- * the specified offsets to the first element in each bank.
- *
- * @param dataArray the data banks.
- * @param size the number of elements in the data bank.
- * @param offsets the offsets to the first element in each data bank.
- *
- * @throws NullPointerException if <code>dataArray</code> is
- * <code>null</code>.
- */
- public DataBufferShort(short[][] dataArray, int size, int[] offsets)
- {
- super(TYPE_SHORT, size, dataArray.length, offsets);
- bankData = dataArray;
- data = bankData[0];
- }
-
- /**
- * Returns the first data bank.
- *
- * @return The first data bank.
- */
- public short[] getData()
- {
- return data;
- }
-
- /**
- * Returns a data bank.
- *
- * @param bank the bank index.
- * @return A data bank.
- */
- public short[] getData(int bank)
- {
- return bankData[bank];
- }
-
- /**
- * Returns the array underlying this <code>DataBuffer</code>.
- *
- * @return The data banks.
- */
- public short[][] getBankData()
- {
- return bankData;
- }
-
- /**
- * Returns an element from the first data bank. The offset (specified in
- * the constructor) is added to <code>i</code> before accessing the
- * underlying data array.
- *
- * @param i the element index.
- * @return The element.
- */
- public int getElem(int i)
- {
- return data[i+offset];
- }
-
- /**
- * Returns an element from a particular data bank. The offset (specified in
- * the constructor) is added to <code>i</code> before accessing the
- * underlying data array.
- *
- * @param bank the bank index.
- * @param i the element index.
- * @return The element.
- */
- public int getElem(int bank, int i)
- {
- return bankData[bank][i+offsets[bank]];
- }
-
- /**
- * Sets an element in the first data bank. The offset (specified in the
- * constructor) is added to <code>i</code> before updating the underlying
- * data array.
- *
- * @param i the element index.
- * @param val the new element value.
- */
- public void setElem(int i, int val)
- {
- data[i+offset] = (short) val;
- }
-
- /**
- * Sets an element in a particular data bank. The offset (specified in the
- * constructor) is added to <code>i</code> before updating the underlying
- * data array.
- *
- * @param bank the data bank index.
- * @param i the element index.
- * @param val the new element value.
- */
- public void setElem(int bank, int i, int val)
- {
- bankData[bank][i+offsets[bank]] = (short) val;
- }
-}
diff --git a/libjava/classpath/java/awt/image/DataBufferUShort.java b/libjava/classpath/java/awt/image/DataBufferUShort.java
deleted file mode 100644
index d2cadcf..0000000
--- a/libjava/classpath/java/awt/image/DataBufferUShort.java
+++ /dev/null
@@ -1,246 +0,0 @@
-/* DataBufferUShort.java --
- Copyright (C) 2000, 2002, 2004, 2005 Free Software Foundation
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package java.awt.image;
-
-/* This is one of several classes that are nearly identical. Maybe we
- should have a central template and generate all these files. This
- is one of the cases where templates or macros would have been
- useful to have in Java.
-
- This file has been created using search-replace. My only fear is
- that these classes will grow out-of-sync as of a result of changes
- that are not propagated to the other files. As always, mirroring
- code is a maintenance nightmare. */
-
-/**
- * A {@link DataBuffer} that uses an array of <code>short</code> primitives
- * to represent each of its banks.
- *
- * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
- */
-public final class DataBufferUShort extends DataBuffer
-{
- private short[] data;
- private short[][] bankData;
-
- /**
- * Creates a new data buffer with a single data bank containing the
- * specified number of <code>short</code> elements.
- *
- * @param size the number of elements in the data bank.
- */
- public DataBufferUShort(int size)
- {
- super(TYPE_USHORT, size, 1, 0);
- bankData = new short[1][];
- data = new short[size];
- bankData[0] = data;
- }
-
- /**
- * Creates a new data buffer with the specified number of data banks,
- * each containing the specified number of <code>short</code> elements.
- *
- * @param size the number of elements in the data bank.
- * @param numBanks the number of data banks.
- */
- public DataBufferUShort(int size, int numBanks)
- {
- super(TYPE_USHORT, size, numBanks);
- bankData = new short[numBanks][size];
- data = bankData[0];
- }
-
- /**
- * Creates a new data buffer backed by the specified data bank.
- *
- * @param dataArray the data bank.
- * @param size the number of elements in the data bank.
- *
- * @throws NullPointerException if dataArray is null
- */
- public DataBufferUShort(short[] dataArray, int size)
- {
- super(TYPE_USHORT, size, 1, 0);
- if (dataArray == null)
- throw new NullPointerException();
- bankData = new short[1][];
- data = dataArray;
- bankData[0] = data;
- }
-
- /**
- * Creates a new data buffer backed by the specified data bank, with
- * the specified offset to the first element.
- *
- * @param dataArray the data bank.
- * @param size the number of elements in the data bank.
- * @param offset the offset to the first element in the array.
- *
- * @throws NullPointerException if dataArray is null
- */
- public DataBufferUShort(short[] dataArray, int size, int offset)
- {
- super(TYPE_USHORT, size, 1, offset);
- if (dataArray == null)
- throw new NullPointerException();
- bankData = new short[1][];
- data = dataArray;
- bankData[0] = data;
- }
-
- /**
- * Creates a new data buffer backed by the specified data banks.
- *
- * @param dataArray the data banks.
- * @param size the number of elements in the data bank.
- *
- * @throws NullPointerException if <code>dataArray</code> is
- * <code>null</code>.
- */
- public DataBufferUShort(short[][] dataArray, int size)
- {
- super(TYPE_USHORT, size, dataArray.length);
- bankData = dataArray;
- data = bankData[0];
- }
-
- /**
- * Creates a new data buffer backed by the specified data banks, with
- * the specified offsets to the first element in each bank.
- *
- * @param dataArray the data banks.
- * @param size the number of elements in the data bank.
- * @param offsets the offsets to the first element in each data bank.
- *
- * @throws NullPointerException if <code>dataArray</code> is
- * <code>null</code>.
- */
- public DataBufferUShort(short[][] dataArray, int size, int[] offsets)
- {
- super(TYPE_USHORT, size, dataArray.length, offsets);
- bankData = dataArray;
- data = bankData[0];
- }
-
- /**
- * Returns the first data bank.
- *
- * @return The first data bank.
- */
- public short[] getData()
- {
- return data;
- }
-
- /**
- * Returns a data bank.
- *
- * @param bank the bank index.
- * @return A data bank.
- */
- public short[] getData(int bank)
- {
- return bankData[bank];
- }
-
- /**
- * Returns the array underlying this <code>DataBuffer</code>.
- *
- * @return The data banks.
- */
- public short[][] getBankData()
- {
- return bankData;
- }
-
- /**
- * Returns an element from the first data bank. The offset (specified in
- * the constructor) is added to <code>i</code> before accessing the
- * underlying data array.
- *
- * @param i the element index.
- * @return The element.
- */
- public int getElem(int i)
- {
- return data[i+offset] & 0xffff; // get unsigned short as int
- }
-
- /**
- * Returns an element from a particular data bank. The offset (specified in
- * the constructor) is added to <code>i</code> before accessing the
- * underlying data array.
- *
- * @param bank the bank index.
- * @param i the element index.
- * @return The element.
- */
- public int getElem(int bank, int i)
- {
- // get unsigned short as int
- return bankData[bank][i+offsets[bank]] & 0xffff;
- }
-
- /**
- * Sets an element in the first data bank. The offset (specified in the
- * constructor) is added to <code>i</code> before updating the underlying
- * data array.
- *
- * @param i the element index.
- * @param val the new element value.
- */
- public void setElem(int i, int val)
- {
- data[i+offset] = (short) val;
- }
-
- /**
- * Sets an element in a particular data bank. The offset (specified in the
- * constructor) is added to <code>i</code> before updating the underlying
- * data array.
- *
- * @param bank the data bank index.
- * @param i the element index.
- * @param val the new element value.
- */
- public void setElem(int bank, int i, int val)
- {
- bankData[bank][i+offsets[bank]] = (short) val;
- }
-}
diff --git a/libjava/classpath/java/awt/image/DirectColorModel.java b/libjava/classpath/java/awt/image/DirectColorModel.java
deleted file mode 100644
index a464fed..0000000
--- a/libjava/classpath/java/awt/image/DirectColorModel.java
+++ /dev/null
@@ -1,435 +0,0 @@
-/* DirectColorModel.java --
- Copyright (C) 1999, 2000, 2002, 2004 Free Software Foundation
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-import gnu.java.awt.Buffers;
-
-import java.awt.Point;
-import java.awt.Transparency;
-import java.awt.color.ColorSpace;
-
-/**
- * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
- * @author C. Brian Jones (cbj@gnu.org)
- * @author Mark Benvenuto (mcb54@columbia.edu)
- */
-public class DirectColorModel extends PackedColorModel
-{
- /**
- * For the color model created with this constructor the pixels
- * will have fully opaque alpha components with a value of 255.
- * Each mask should describe a fully contiguous set of bits in the
- * most likely order of alpha, red, green, blue from the most significant
- * byte to the least significant byte.
- *
- * @param pixelBits the number of bits wide used for bit size of pixel values
- * @param rmask the bits describing the red component of a pixel
- * @param gmask the bits describing the green component of a pixel
- * @param bmask the bits describing the blue component of a pixel
- */
- public DirectColorModel(int pixelBits, int rmask, int gmask, int bmask)
- {
- this(ColorSpace.getInstance(ColorSpace.CS_sRGB), pixelBits,
- rmask, gmask, bmask, 0,
- false, // not alpha premultiplied
- Buffers.smallestAppropriateTransferType(pixelBits) // find type
- );
- }
-
- /**
- * For the color model created with this constructor the pixels
- * will have fully opaque alpha components with a value of 255.
- * Each mask should describe a fully contiguous set of bits in the
- * most likely order of red, green, blue from the most significant
- * byte to the least significant byte.
- *
- * @param pixelBits the number of bits wide used for bit size of pixel values
- * @param rmask the bits describing the red component of a pixel
- * @param gmask the bits describing the green component of a pixel
- * @param bmask the bits describing the blue component of a pixel
- * @param amask the bits describing the alpha component of a pixel
- */
- public DirectColorModel(int pixelBits,
- int rmask, int gmask, int bmask, int amask)
- {
- this(ColorSpace.getInstance(ColorSpace.CS_sRGB), pixelBits,
- rmask, gmask, bmask, amask,
- false, // not alpha premultiplied
- Buffers.smallestAppropriateTransferType(pixelBits) // find type
- );
- }
-
- public DirectColorModel(ColorSpace cspace, int pixelBits,
- int rmask, int gmask, int bmask, int amask,
- boolean isAlphaPremultiplied,
- int transferType)
- {
- super(cspace, pixelBits,
- rmask, gmask, bmask, amask, isAlphaPremultiplied,
- ((amask == 0) ? Transparency.OPAQUE : Transparency.TRANSLUCENT),
- transferType);
- }
-
- public final int getRedMask()
- {
- return getMask(0);
- }
-
- public final int getGreenMask()
- {
- return getMask(1);
- }
-
- public final int getBlueMask()
- {
- return getMask(2);
- }
-
- public final int getAlphaMask()
- {
- return hasAlpha() ? getMask(3) : 0;
- }
-
- /**
- * Get the red component of the given pixel.
- * <br>
- */
- public final int getRed(int pixel)
- {
- return extractAndNormalizeSample(pixel, 0);
- }
-
- /**
- * Get the green component of the given pixel.
- * <br>
- */
- public final int getGreen(int pixel)
- {
- return extractAndNormalizeSample(pixel, 1);
- }
-
- /**
- * Get the blue component of the given pixel.
- * <br>
- */
- public final int getBlue(int pixel)
- {
- return extractAndNormalizeSample(pixel, 2);
- }
-
- /**
- * Get the alpha component of the given pixel.
- * <br>
- */
- public final int getAlpha(int pixel)
- {
- if (!hasAlpha())
- return 255;
- return extractAndScaleSample(pixel, 3);
- }
-
- private int extractAndNormalizeSample(int pixel, int component)
- {
- int value = extractAndScaleSample(pixel, component);
- if (hasAlpha() && isAlphaPremultiplied() && getAlpha(pixel) != 0)
- value = value*255/getAlpha(pixel);
- return value;
- }
-
- private int extractAndScaleSample(int pixel, int component)
- {
- int field = pixel & getMask(component);
- int to8BitShift =
- 8 - shifts[component] - getComponentSize(component);
- return (to8BitShift>0) ?
- (field << to8BitShift) :
- (field >>> (-to8BitShift));
- }
-
- /**
- * Get the RGB color value of the given pixel using the default
- * RGB color model.
- * <br>
- *
- * @param pixel a pixel value
- */
- public final int getRGB(int pixel)
- {
- /* FIXME: The Sun docs show that this method is overridden, but I
- don't see any way to improve on the superclass
- implementation. */
- return super.getRGB(pixel);
- }
-
- public int getRed(Object inData)
- {
- return getRed(getPixelFromArray(inData));
- }
-
- public int getGreen(Object inData)
- {
- return getGreen(getPixelFromArray(inData));
- }
-
- public int getBlue(Object inData)
- {
- return getBlue(getPixelFromArray(inData));
- }
-
- public int getAlpha(Object inData)
- {
- return getAlpha(getPixelFromArray(inData));
- }
-
- public int getRGB(Object inData)
- {
- return getRGB(getPixelFromArray(inData));
- }
-
- /**
- * Converts a normalized pixel int value in the sRGB color
- * space to an array containing a single pixel of the color space
- * of the color model.
- *
- * <p>This method performs the inverse function of
- * <code>getRGB(Object inData)</code>.
- *
- * @param rgb pixel as a normalized sRGB, 0xAARRGGBB value.
- *
- * @param pixel to avoid needless creation of arrays, an array to
- * use to return the pixel can be given. If null, a suitable array
- * will be created.
- *
- * @return array of transferType containing a single pixel. The
- * pixel should be encoded in the natural way of the color model.
- *
- * @see #getRGB(Object)
- */
- public Object getDataElements(int rgb, Object pixel)
- {
- // FIXME: handle alpha multiply
-
- int pixelValue = 0;
- int a = 0;
- if (hasAlpha()) {
- a = (rgb >>> 24) & 0xff;
- pixelValue = valueToField(a, 3, 8);
- }
-
- if (hasAlpha() && isAlphaPremultiplied())
- {
- int r, g, b;
- /* if r=0xff and a=0xff, then resulting
- value will be (r*a)>>>8 == 0xfe... This seems wrong.
- We should divide by 255 rather than shifting >>>8 after
- multiplying.
-
- Too bad, shifting is probably less expensive.
- r = ((rgb >>> 16) & 0xff)*a;
- g = ((rgb >>> 8) & 0xff)*a;
- b = ((rgb >>> 0) & 0xff)*a; */
- /* The r, g, b values we calculate are 16 bit. This allows
- us to avoid discarding the lower 8 bits obtained if
- multiplying with the alpha band. */
-
- // using 16 bit values
- r = ((rgb >>> 8) & 0xff00)*a/255;
- g = ((rgb >>> 0) & 0xff00)*a/255;
- b = ((rgb << 8) & 0xff00)*a/255;
- pixelValue |=
- valueToField(r, 0, 16) | // Red
- valueToField(g, 1, 16) | // Green
- valueToField(b, 2, 16); // Blue
- }
- else
- {
- int r, g, b;
- // using 8 bit values
- r = (rgb >>> 16) & 0xff;
- g = (rgb >>> 8) & 0xff;
- b = (rgb >>> 0) & 0xff;
-
- pixelValue |=
- valueToField(r, 0, 8) | // Red
- valueToField(g, 1, 8) | // Green
- valueToField(b, 2, 8); // Blue
- }
-
- /* In this color model, the whole pixel fits in the first element
- of the array. */
- DataBuffer buffer = Buffers.createBuffer(transferType, pixel, 1);
- buffer.setElem(0, pixelValue);
- return Buffers.getData(buffer);
- }
-
- /**
- * Converts a value to the correct field bits based on the
- * information derived from the field masks.
- *
- * @param highBit the position of the most significant bit in the
- * val parameter.
- */
- private int valueToField(int val, int component, int highBit)
- {
- int toFieldShift =
- getComponentSize(component) + shifts[component] - highBit;
- int ret = (toFieldShift>0) ?
- (val << toFieldShift) :
- (val >>> (-toFieldShift));
- return ret & getMask(component);
- }
-
- /**
- * Converts a 16 bit value to the correct field bits based on the
- * information derived from the field masks.
- */
- private int value16ToField(int val, int component)
- {
- int toFieldShift = getComponentSize(component) + shifts[component] - 16;
- return (toFieldShift>0) ?
- (val << toFieldShift) :
- (val >>> (-toFieldShift));
- }
-
- /**
- * Fills an array with the unnormalized component samples from a
- * pixel value. I.e. decompose the pixel, but not perform any
- * color conversion.
- */
- public final int[] getComponents(int pixel, int[] components, int offset)
- {
- int numComponents = getNumComponents();
- if (components == null) components = new int[offset + numComponents];
-
- for (int b=0; b<numComponents; b++)
- components[offset++] = (pixel&getMask(b)) >>> shifts[b];
-
- return components;
- }
-
- public final int[] getComponents(Object pixel, int[] components,
- int offset)
- {
- return getComponents(getPixelFromArray(pixel), components, offset);
- }
-
- /**
- * Creates a <code>WriteableRaster</code> that has a <code>SampleModel</code>
- * that is compatible with this <code>ColorModel</code>.
- *
- * @param w the width of the writeable raster to create
- * @param h the height of the writeable raster to create
- *
- * @throws IllegalArgumentException if <code>w</code> or <code>h</code>
- * is less than or equal to zero
- */
- public final WritableRaster createCompatibleWritableRaster(int w, int h)
- {
- // Sun also makes this check here.
- if(w <= 0 || h <= 0)
- throw new IllegalArgumentException("width (=" + w + ") and height (="
- + h + ") must be > 0");
-
- SampleModel sm = createCompatibleSampleModel(w, h);
- Point origin = new Point(0, 0);
- return Raster.createWritableRaster(sm, origin);
- }
-
- public int getDataElement(int[] components, int offset)
- {
- int numComponents = getNumComponents();
- int pixelValue = 0;
-
- for (int c=0; c<numComponents; c++)
- pixelValue |= (components[offset++] << shifts[c]) & getMask(c);
-
- return pixelValue;
- }
-
- public Object getDataElements(int[] components, int offset, Object obj)
- {
- /* In this color model, the whole pixel fits in the first element
- of the array. */
- int pixelValue = getDataElement(components, offset);
-
- DataBuffer buffer = Buffers.createBuffer(transferType, obj, 1);
- buffer.setElem(0, pixelValue);
- return Buffers.getData(buffer);
- }
-
- public final ColorModel coerceData (WritableRaster raster,
- boolean isAlphaPremultiplied)
- {
- if (this.isAlphaPremultiplied == isAlphaPremultiplied || !hasAlpha())
- return this;
-
- /* TODO: provide better implementation based on the
- assumptions we can make due to the specific type of the
- color model. */
- coerceDataWorker(raster, isAlphaPremultiplied);
-
- return new DirectColorModel(cspace, pixel_bits, getRedMask(),
- getGreenMask(), getBlueMask(), getAlphaMask(),
- isAlphaPremultiplied, transferType);
- }
-
- public boolean isCompatibleRaster(Raster raster)
- {
- /* FIXME: the Sun docs say this method is overridden here,
- but I don't see any way to improve upon the implementation
- in ColorModel. */
- return super.isCompatibleRaster(raster);
- }
-
- String stringParam()
- {
- return super.stringParam() +
- ", redMask=" + Integer.toHexString(getRedMask()) +
- ", greenMask=" + Integer.toHexString(getGreenMask()) +
- ", blueMask=" + Integer.toHexString(getBlueMask()) +
- ", alphaMask=" + Integer.toHexString(getAlphaMask());
- }
-
- public String toString()
- {
- /* FIXME: Again, docs say override, but how do we improve upon the
- superclass implementation? */
- return super.toString();
- }
-}
diff --git a/libjava/classpath/java/awt/image/FilteredImageSource.java b/libjava/classpath/java/awt/image/FilteredImageSource.java
deleted file mode 100644
index f56a93a..0000000
--- a/libjava/classpath/java/awt/image/FilteredImageSource.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/* FilteredImageSource.java -- Java class for providing image data
- Copyright (C) 1999 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-import java.util.Hashtable;
-
-/**
- *
- * @see ImageConsumer
- * @author C. Brian Jones (cbj@gnu.org)
- */
-public class FilteredImageSource implements ImageProducer
-{
- ImageProducer ip;
- ImageFilter filter;
- Hashtable consumers = new Hashtable();
-
- /**
- * The given filter is applied to the given image producer
- * to create a new image producer.
- */
- public FilteredImageSource(ImageProducer ip, ImageFilter filter) {
- this.ip = ip;
- this.filter = filter;
- }
-
- /**
- * Used to register an <code>ImageConsumer</code> with this
- * <code>ImageProducer</code>.
- */
- public synchronized void addConsumer(ImageConsumer ic) {
- if (consumers.containsKey(ic))
- return;
-
- ImageFilter f = filter.getFilterInstance(ic);
- consumers.put(ic, f);
- ip.addConsumer(f);
- }
-
- /**
- * Used to determine if the given <code>ImageConsumer</code> is
- * already registered with this <code>ImageProducer</code>.
- */
- public synchronized boolean isConsumer(ImageConsumer ic) {
- ImageFilter f = (ImageFilter)consumers.get(ic);
- if (f != null)
- return ip.isConsumer(f);
- return false;
- }
-
- /**
- * Used to remove an <code>ImageConsumer</code> from the list of
- * registered consumers for this <code>ImageProducer</code>.
- */
- public synchronized void removeConsumer(ImageConsumer ic) {
- ImageFilter f = (ImageFilter)consumers.remove(ic);
- if (f != null)
- ip.removeConsumer(f);
- }
-
- /**
- * Used to register an <code>ImageConsumer</code> with this
- * <code>ImageProducer</code> and then immediately start
- * reconstruction of the image data to be delivered to all
- * registered consumers.
- */
- public void startProduction(ImageConsumer ic) {
- ImageFilter f;
- if (!(consumers.containsKey(ic))) {
- f = filter.getFilterInstance(ic);
- consumers.put(ic, f);
- ip.addConsumer(f);
- } else {
- f = (ImageFilter)consumers.get( ic );
- }
- ip.startProduction(f);
- }
-
- /**
- * Used to register an <code>ImageConsumer</code> with this
- * <code>ImageProducer</code> and then request that this producer
- * resend the image data in the order top-down, left-right.
- */
- public void requestTopDownLeftRightResend(ImageConsumer ic) {
- ImageFilter f = (ImageFilter)consumers.get(ic);
- ip.requestTopDownLeftRightResend(f);
- }
-}
diff --git a/libjava/classpath/java/awt/image/ImageConsumer.java b/libjava/classpath/java/awt/image/ImageConsumer.java
deleted file mode 100644
index 8f3c2b1..0000000
--- a/libjava/classpath/java/awt/image/ImageConsumer.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/* ImageConsumer.java -- Java interface for image consumption
- Copyright (C) 1999, 2003 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-import java.util.Hashtable;
-
-/**
- * An object implementing the <code>ImageProducer</code> interface can
- * use objects implementing this interface to deliver the image data.
- *
- * @author C. Brian Jones (cbj@gnu.org)
- */
-public interface ImageConsumer
-{
- /**
- * The pixel order may be random. This should be
- * the default assumption of the <code>ImageConsumer</code>.
- *
- * @see #setHints
- */
- int RANDOMPIXELORDER = 1;
-
- /**
- * The pixel order is top-down, left-right.
- *
- * @see #setHints
- */
- int TOPDOWNLEFTRIGHT = 2;
-
- /**
- * The pixel order is in multiples of complete scanlines.
- *
- * @see #setHints
- */
- int COMPLETESCANLINES = 4;
-
- /**
- * The pixels will be delivered in a single pass. There is at
- * most one call to <code>setPixels</code> for any single pixel.
- *
- * @see #setHints
- * @see #setPixels(int, int, int, int, ColorModel, int[], int, int)
- */
- int SINGLEPASS = 8;
-
- /**
- * The pixels will be delivered with multiple calls to
- * <code>setPixels</code>. The image contains a single frame
- * which ends when <code>imageComplete</code> is called with the
- * <code>STATICIMAGEDONE</code> flag. If the image is constantly
- * changing such as with video then the end of each frame is
- * marked by a similar call to <code>imageComplete</code> with the
- * <code>SINGLEFRAMEDONE</code> flag.
- *
- * @see #setHints
- * @see #imageComplete
- */
- int SINGLEFRAME = 16;
-
- /**
- * Indicates an error occurred while producing an image.
- *
- * @see #imageComplete
- */
- int IMAGEERROR = 1;
-
- /**
- * A single frame is complete but more will follow.
- *
- * @see #imageComplete
- */
- int SINGLEFRAMEDONE = 2;
-
- /**
- * The image is complete and no more pixels or frames will follow.
- *
- * @see #imageComplete
- */
- int STATICIMAGEDONE = 3;
-
- /**
- * Production of the image has been aborted.
- *
- * @see #imageComplete
- */
- int IMAGEABORTED = 4;
-
- /**
- * An <code>ImageProducer</code> indicates the size of the image
- * being produced using this method.
- *
- * @param width the width of the image
- * @param height the height of the image
- */
- void setDimensions(int width, int height);
-
- /**
- * An <code>ImageProducer</code> can set a list of properties
- * associated with this image by using this method.
- *
- * @param props the list of properties associated with this image
- */
- void setProperties(Hashtable<?,?> props);
-
- /**
- * This <code>ColorModel</code> should indicate the model used by
- * the majority of calls to <code>setPixels</code>. Each call to
- * <code>setPixels</code> could however indicate a different
- * <code>ColorModel</code>.
- *
- * @param model the color model to be used most often by setPixels
- * @see ColorModel
- */
- void setColorModel(ColorModel model);
-
- /**
- * The <code>ImageProducer</code> should call this method with a
- * bit mask of hints from any of <code>RANDOMPIXELORDER</code>,
- * <code>TOPDOWNLEFTRIGHT</code>, <code>COMPLETESCANLINES</code>,
- * <code>SINGLEPASS</code>, <code>SINGLEFRAME</code>.
- *
- * @param flags a bit mask of hints
- */
- void setHints(int flags);
-
- /**
- * Deliver a subset of an ImageProducer's pixels to this ImageConsumer.
- *
- * Each element of the pixels array represents one pixel. The
- * pixel data is formatted according to the color model model.
- * The x and y parameters are the coordinates of the block of
- * pixels being delivered to this ImageConsumer. They are
- * specified relative to the top left corner of the image being
- * produced. Likewise, w and h are the pixel block's dimensions.
- *
- * @param x x coordinate of pixel block
- * @param y y coordinate of pixel block
- * @param w width of pixel block
- * @param h height of pixel block
- * @param model color model used to interpret pixel data
- * @param pixels pixel block data
- * @param offset offset into pixels array
- * @param scansize width of one row in the pixel block
- */
- void setPixels(int x, int y, int w, int h,
- ColorModel model, byte[] pixels, int offset, int scansize);
-
- /**
- * Deliver a subset of an ImageProducer's pixels to this ImageConsumer.
- *
- * Each element of the pixels array represents one pixel. The
- * pixel data is formatted according to the color model model.
- * The x and y parameters are the coordinates of the rectangular
- * region of pixels being delivered to this ImageConsumer,
- * specified relative to the top left corner of the image being
- * produced. Likewise, w and h are the pixel region's dimensions.
- *
- * @param x x coordinate of pixel block
- * @param y y coordinate of pixel block
- * @param w width of pixel block
- * @param h height of pixel block
- * @param model color model used to interpret pixel data
- * @param pixels pixel block data
- * @param offset offset into pixels array
- * @param scansize width of one row in the pixel block
- */
- void setPixels(int x, int y, int w, int h,
- ColorModel model, int[] pixels, int offset, int scansize);
-
- /**
- * The <code>ImageProducer</code> calls this method to indicate a
- * single frame or the entire image is complete. The method is
- * also used to indicate an error in loading or producing the
- * image.
- *
- * @param status the status of image production, represented by a
- * bitwise OR of ImageConsumer flags
- */
- void imageComplete(int status);
-}
diff --git a/libjava/classpath/java/awt/image/ImageFilter.java b/libjava/classpath/java/awt/image/ImageFilter.java
deleted file mode 100644
index 10df82e..0000000
--- a/libjava/classpath/java/awt/image/ImageFilter.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/* ImageFilter.java -- Java class for filtering images
- Copyright (C) 1999 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-import java.util.Hashtable;
-
-/**
- * The <code>ImageFilter</code> class is a base class which can be
- * extended to provide different types of filters for an image. By
- * default this class does nothing to an image passing through it.
- *
- * @author C. Brian Jones (cbj@gnu.org)
- */
-public class ImageFilter implements ImageConsumer, Cloneable
-{
- /**
- * The consumer this filter is filtering an image data stream for.
- * It is initialized in the method <code>getFilterInstance</code>.
- */
- protected ImageConsumer consumer = null;
-
- /**
- * The <code>ImageConsumer</code> can use this method to request
- * the pixels be delivered in top-down, left-right order.
- * <br>
- * The filter can respond in three different ways.
- * <ul>
- * <li>The default behavior is to forward the request to the
- * <code>ImageProducer</code>
- * using the method <code>requestTopDownLeftRightResend</code>
- * and using the filter as the consumer.</li>
- * <li>The filter has the pixels and can retransmit them in the
- * top-down, left-right order.</li>
- * <li>The filter can do nothing when this method is called.</li>
- * </ul>
- */
- public void resendTopDownLeftRight(ImageProducer ip)
- {
- ip.requestTopDownLeftRightResend(this);
- }
-
- /**
- * By default, returns a shallow copy of the object created by
- * <code>Object.clone()</code>
- *
- * @see java.lang.Object#clone ()
- */
- public Object clone()
- {
- try
- {
- return super.clone();
- }
- catch (CloneNotSupportedException e)
- {
- // This should never happen as this class implements the
- // Cloneable interface.
- throw new InternalError ();
- }
- }
-
- /**
- * This is the only method which can set the
- * <code>ImageConsumer</code> for this filter. By default a clone
- * of this filter with the appropriate consumer set is returned.
- *
- * @see #clone ()
- */
- public ImageFilter getFilterInstance(ImageConsumer ic)
- {
- ImageFilter f = (ImageFilter)clone();
- f.consumer = ic;
- return f;
- }
-
- /**
- * An <code>ImageProducer</code> indicates the size of the image
- * being produced using this method. A filter can override this
- * method to intercept these calls from the producer in order to
- * change either the width or the height before in turn calling
- * the consumer's <code>setDimensions</code> method.
- *
- * @param width the width of the image
- * @param height the height of the image
- */
- public void setDimensions(int width, int height)
- {
- consumer.setDimensions(width, height);
- }
-
- /**
- * An <code>ImageProducer</code> can set a list of properties
- * associated with this image by using this method.
- *
- * @param props the list of properties associated with this image
- */
- public void setProperties(Hashtable<?,?> props)
- {
- Hashtable copy = (Hashtable) props.clone();
- Object o = copy.get("filters");
- if (o == null)
- copy.put("filters", toString());
- else if (o instanceof String)
- copy.put("filters", ((String) o) + toString());
-
- consumer.setProperties(copy);
- }
-
- /**
- * Override this method to process calls to this method from the
- * <code>ImageProducer</code>. By default the <code>setColorModel</code>
- * method of the consumer is called with the specified <code>model</code>.
- *
- * @param model the color model to be used most often by setPixels
- *
- * @see ColorModel
- */
- public void setColorModel(ColorModel model)
- {
- consumer.setColorModel(model);
- }
-
- /**
- * The <code>ImageProducer</code> should call this method with a
- * bit mask of hints from any of <code>RANDOMPIXELORDER</code>,
- * <code>TOPDOWNLEFTRIGHT</code>, <code>COMPLETESCANLINES</code>,
- * <code>SINGLEPASS</code>, <code>SINGLEFRAME</code> from the
- * <code>ImageConsumer</code> interface.
- *
- * @param flags a bit mask of hints
- * @see ImageConsumer
- */
- public void setHints(int flags)
- {
- consumer.setHints(flags);
- }
-
- /**
- * This function delivers a rectangle of pixels where any
- * pixel(m,n) is stored in the array as a <code>byte</code> at
- * index (n * scansize + m + offset).
- *
- * @param x the x coordinate of the rectangle
- * @param y the y coordinate of the rectangle
- * @param w the width of the rectangle
- * @param h the height of the rectangle
- * @param model the <code>ColorModel</code> used to translate the pixels
- * @param pixels the array of pixel values
- * @param offset the index of the first pixels in the <code>pixels</code> array
- * @param scansize the width to use in extracting pixels from the <code>pixels</code> array
- */
- public void setPixels(int x, int y, int w, int h,
- ColorModel model, byte[] pixels, int offset,
- int scansize)
- {
- consumer.setPixels(x, y, w, h, model, pixels, offset, scansize);
- }
-
- /**
- * This function delivers a rectangle of pixels where any
- * pixel(m,n) is stored in the array as an <code>int</code> at
- * index (n * scansize + m + offset).
- *
- * @param x the x coordinate of the rectangle
- * @param y the y coordinate of the rectangle
- * @param w the width of the rectangle
- * @param h the height of the rectangle
- * @param model the <code>ColorModel</code> used to translate the pixels
- * @param pixels the array of pixel values
- * @param offset the index of the first pixels in the <code>pixels</code> array
- * @param scansize the width to use in extracting pixels from the <code>pixels</code> array
- */
- public void setPixels(int x, int y, int w, int h,
- ColorModel model, int[] pixels, int offset,
- int scansize)
- {
- consumer.setPixels(x, y, w, h, model, pixels, offset, scansize);
- }
-
- /**
- * The <code>ImageProducer</code> calls this method to indicate a
- * single frame or the entire image is complete. The method is
- * also used to indicate an error in loading or producing the
- * image.
- */
- public void imageComplete(int status)
- {
- consumer.imageComplete(status);
- }
-}
diff --git a/libjava/classpath/java/awt/image/ImageObserver.java b/libjava/classpath/java/awt/image/ImageObserver.java
deleted file mode 100644
index e63d4bb..0000000
--- a/libjava/classpath/java/awt/image/ImageObserver.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/* ImageObserver.java -- Java interface for asynchronous updates to an image
- Copyright (C) 1999 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-import java.awt.Image;
-
-/**
- * An object implementing the <code>ImageObserver</code> interface can
- * receive updates on image construction from an
- * <code>ImageProducer</code> asynchronously.
- *
- * @see ImageProducer
- * @author C. Brian Jones (cbj@gnu.org)
- */
-public interface ImageObserver
-{
- /**
- * The width of the image has been provided as the
- * <code>width</code> argument to <code>imageUpdate</code>.
- *
- * @see #imageUpdate
- */
- int WIDTH = 1;
-
- /**
- * The height of the image has been provided as the
- * <code>height</code> argument to <code>imageUpdate</code>.
- *
- * @see #imageUpdate
- */
- int HEIGHT = 2;
-
- /**
- * The properties of the image have been provided.
- *
- * @see #imageUpdate
- * @see java.awt.Image#getProperty (java.lang.String, java.awt.image.ImageObserver)
- */
- int PROPERTIES = 4;
-
- /**
- * More pixels are now available for drawing a scaled variation of
- * the image.
- *
- * @see #imageUpdate
- */
- int SOMEBITS = 8;
-
- /**
- * All the pixels needed to draw a complete frame of a multi-frame
- * image are available.
- *
- * @see #imageUpdate
- */
- int FRAMEBITS = 16;
-
- /**
- * An image with a single frame, a static image, is complete.
- *
- * @see #imageUpdate
- */
- int ALLBITS = 32;
-
- /**
- * An error was encountered while producing the image.
- *
- * @see #imageUpdate
- */
- int ERROR = 64;
-
- /**
- * Production of the image was aborted.
- *
- * @see #imageUpdate
- */
- int ABORT = 128;
-
- /**
- * This is a callback method for an asynchronous image producer to
- * provide updates on the production of the image as it happens.
- *
- * @param image the image the update refers to
- * @param flags a bit mask indicating what is provided with this update
- * @param x the x coordinate of the image
- * @param y the y coordinate of the image
- * @param width the width of the image
- * @param height the height of the image
- *
- * @see java.awt.Image
- */
- boolean imageUpdate(Image image, int flags, int x,
- int y, int width, int height);
-}
diff --git a/libjava/classpath/java/awt/image/ImageProducer.java b/libjava/classpath/java/awt/image/ImageProducer.java
deleted file mode 100644
index c0f9ad4..0000000
--- a/libjava/classpath/java/awt/image/ImageProducer.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/* ImageProducer.java -- Java interface for image production
- Copyright (C) 1999 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-/**
- * An object implementing the <code>ImageProducer</code> interface can
- * produce data for images. Each image has a corresponding
- * <code>ImageProducer</code> which is needed for things such as
- * resizing the image.
- *
- * @see ImageConsumer
- * @author C. Brian Jones (cbj@gnu.org)
- */
-public interface ImageProducer
-{
- /**
- * Used to register an <code>ImageConsumer</code> with this
- * <code>ImageProducer</code>.
- */
- void addConsumer(ImageConsumer ic);
-
- /**
- * Used to determine if the given <code>ImageConsumer</code> is
- * already registered with this <code>ImageProducer</code>.
- */
- boolean isConsumer(ImageConsumer ic);
-
- /**
- * Used to remove an <code>ImageConsumer</code> from the list of
- * registered consumers for this <code>ImageProducer</code>.
- */
- void removeConsumer(ImageConsumer ic);
-
- /**
- * Used to register an <code>ImageConsumer</code> with this
- * <code>ImageProducer</code> and then immediately start
- * reconstruction of the image data to be delivered to all
- * registered consumers.
- */
- void startProduction(ImageConsumer ic);
-
- /**
- * Used to register an <code>ImageConsumer</code> with this
- * <code>ImageProducer</code> and then request that this producer
- * resend the image data in the order top-down, left-right.
- */
- void requestTopDownLeftRightResend(ImageConsumer ic);
-}
diff --git a/libjava/classpath/java/awt/image/ImagingOpException.java b/libjava/classpath/java/awt/image/ImagingOpException.java
deleted file mode 100644
index ca40e9e..0000000
--- a/libjava/classpath/java/awt/image/ImagingOpException.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/* ImagingOpException.java -- indicates an imaging filter failure
- Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-/**
- * This exception is thrown when <code>BufferedImageOp</code> or
- * <code>RasterOp</code> filters cannot process an image.
- *
- * @author Eric Blake (ebb9@email.byu.edu)
- * @see BufferedImageOp
- * @see RasterOp
- * @status updated to 1.4
- */
-public class ImagingOpException extends RuntimeException
-{
- /**
- * Compatible with JDK 1.0+.
- */
- private static final long serialVersionUID = 8026288481846276658L;
-
- /**
- * Create a new instance with a descriptive error message.
- *
- * @param message the descriptive error message
- */
- public ImagingOpException(String message)
- {
- super(message);
- }
-} // class ImagingOpException
diff --git a/libjava/classpath/java/awt/image/IndexColorModel.java b/libjava/classpath/java/awt/image/IndexColorModel.java
deleted file mode 100644
index 340d38e..0000000
--- a/libjava/classpath/java/awt/image/IndexColorModel.java
+++ /dev/null
@@ -1,736 +0,0 @@
-/* IndexColorModel.java -- Java class for interpreting Pixel objects
- Copyright (C) 1999, 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package java.awt.image;
-
-import gnu.java.awt.Buffers;
-
-import java.awt.color.ColorSpace;
-import java.math.BigInteger;
-
-/**
- * Color model similar to pseudo visual in X11.
- * <br><br>
- * This color model maps linear pixel values to actual RGB and alpha colors.
- * Thus, pixel values are indexes into the color map. Each color component is
- * an 8-bit unsigned value.
- * <br><br>
- * The <code>IndexColorModel</code> supports a map of valid pixels, allowing
- * the representation of holes in the the color map. The valid map is
- * represented as a {@link BigInteger} where each bit indicates the validity
- * of the map entry with the same index.
- * <br><br>
- * Colors can have alpha components for transparency support. If alpha
- * component values aren't given, color values are opaque. The model also
- * supports a reserved pixel value to represent completely transparent colors,
- * no matter what the actual color component values are.
- * <br><br>
- * <code>IndexColorModel</code> supports anywhere from 1 to 16 bit index
- * values. The allowed transfer types are {@link DataBuffer#TYPE_BYTE} and
- * {@link DataBuffer#TYPE_USHORT}.
- *
- * @author C. Brian Jones (cbj@gnu.org)
- */
-public class IndexColorModel extends ColorModel
-{
- private int map_size;
- private boolean opaque; // no alpha, but doesn't account for trans
- private int trans = -1;
- private int[] rgb;
- private BigInteger validBits = BigInteger.ZERO;
-
- /**
- * Creates a new indexed color model for <code>size</code> color elements
- * with no alpha component. Each array must contain at least
- * <code>size</code> elements. For each array, the i-th color is described
- * by reds[i], greens[i] and blues[i].
- *
- * @param bits the number of bits needed to represent <code>size</code>
- * colors.
- * @param size the number of colors in the color map.
- * @param reds the red component of all colors.
- * @param greens the green component of all colors.
- * @param blues the blue component of all colors.
- *
- * @throws IllegalArgumentException if <code>bits</code> &lt; 1 or
- * <code>bits</code> &gt; 16.
- * @throws NullPointerException if any of the arrays is <code>null</code>.
- * @throws ArrayIndexOutOfBoundsException if <code>size</code> is greater
- * than the length of the component arrays.
- */
- public IndexColorModel(int bits, int size, byte[] reds, byte[] greens,
- byte[] blues)
- {
- this(bits, size, reds, greens, blues, (byte[]) null);
- }
-
- /**
- * Creates a new indexed color model for <code>size</code> color elements.
- * Each array must contain at least <code>size</code> elements. For each
- * array, the i-th color is described by reds[i], greens[i] and blues[i].
- * All the colors are opaque except for the transparent color.
- *
- * @param bits the number of bits needed to represent <code>size</code>
- * colors
- * @param size the number of colors in the color map
- * @param reds the red component of all colors
- * @param greens the green component of all colors
- * @param blues the blue component of all colors
- * @param trans the index of the transparent color (use -1 for no
- * transparent color).
- *
- * @throws IllegalArgumentException if <code>bits</code> &lt; 1 or
- * <code>bits</code> &gt; 16.
- * @throws NullPointerException if any of the arrays is <code>null</code>.
- * @throws ArrayIndexOutOfBoundsException if <code>size</code> is greater
- * than the length of the component arrays.
- */
- public IndexColorModel(int bits, int size, byte[] reds, byte[] greens,
- byte[] blues, int trans)
- {
- super(bits, nArray(8, (0 <= trans && trans < size) ? 4 : 3),
- ColorSpace.getInstance(ColorSpace.CS_sRGB),
- (0 <= trans && trans < size), // hasAlpha
- false, OPAQUE,
- Buffers.smallestAppropriateTransferType(bits));
- if (bits < 1)
- throw new IllegalArgumentException("bits < 1");
- if (bits > 16)
- throw new IllegalArgumentException("bits > 16");
- if (size < 1)
- throw new IllegalArgumentException("size < 1");
- map_size = size;
- rgb = createColorMap(bits, size);
- for (int i = 0; i < size; i++)
- {
- rgb[i] = (0xff000000
- | ((reds[i] & 0xff) << 16)
- | ((greens[i] & 0xff) << 8)
- | (blues[i] & 0xff));
- }
-
- setTransparentPixel(trans);
-
- // Generate a bigint with 1's for every pixel
- validBits = validBits.setBit(size).subtract(BigInteger.ONE);
- }
-
- /**
- * Creates a new indexed color model for <code>size</code> color elements
- * including alpha. Each array must contain at least <code>size</code>
- * elements. For each array, the i-th color is described
- * by reds[i], greens[i], blues[i] and alphas[i].
- *
- * @param bits the number of bits needed to represent <code>size</code>
- * colors.
- * @param size the number of colors in the color map.
- * @param reds the red component of all colors.
- * @param greens the green component of all colors.
- * @param blues the blue component of all colors.
- * @param alphas the alpha component of all colors (<code>null</code>
- * permitted).
- *
- * @throws IllegalArgumentException if <code>bits</code> &lt; 1 or
- * <code>bits</code> &gt; 16.
- * @throws NullPointerException if <code>reds</code>, <code>greens</code> or
- * <code>blues</code> is <code>null</code>.
- * @throws ArrayIndexOutOfBoundsException if <code>size</code> is greater
- * than the length of the component arrays.
- */
- public IndexColorModel(int bits, int size, byte[] reds, byte[] greens,
- byte[] blues, byte[] alphas)
- {
- super(bits, nArray(8, (alphas == null ? 3 : 4)),
- ColorSpace.getInstance(ColorSpace.CS_sRGB),
- (alphas != null), false, TRANSLUCENT,
- Buffers.smallestAppropriateTransferType(bits));
- if (bits < 1)
- throw new IllegalArgumentException("bits < 1");
- if (bits > 16)
- throw new IllegalArgumentException("bits > 16");
- if (size < 1)
- throw new IllegalArgumentException("size < 1");
- map_size = size;
- opaque = (alphas == null);
-
- rgb = createColorMap(bits, size);
- if (alphas == null)
- {
- for (int i = 0; i < size; i++)
- {
- rgb[i] = (0xff000000
- | ((reds[i] & 0xff) << 16)
- | ((greens[i] & 0xff) << 8)
- | (blues[i] & 0xff));
- }
- transparency = OPAQUE;
- }
- else
- {
- byte alphaZero = (byte) 0x00;
- byte alphaOne = (byte) 0xFF;
- for (int i = 0; i < size; i++)
- {
- alphaZero = (byte) (alphaZero | alphas[i]);
- alphaOne = (byte) (alphaOne & alphas[i]);
- rgb[i] = ((alphas[i] & 0xff) << 24
- | ((reds[i] & 0xff) << 16)
- | ((greens[i] & 0xff) << 8)
- | (blues[i] & 0xff));
- }
- if ((alphaZero == (byte) 0x00) || (alphaOne == (byte) 0xFF))
- transparency = BITMASK;
- else
- transparency = TRANSLUCENT;
- }
-
- // Generate a bigint with 1's for every pixel
- validBits = validBits.setBit(size).subtract(BigInteger.ONE);
- }
-
- /**
- * Creates a new indexed color model using the color components in
- * <code>cmap</code>. If <code>hasAlpha</code> is <code>true</code> then
- * <code>cmap</code> contains an alpha component after each of the red, green
- * and blue components.
- *
- * @param bits the number of bits needed to represent <code>size</code>
- * colors
- * @param size the number of colors in the color map
- * @param cmap packed color components
- * @param start the offset of the first color component in <code>cmap</code>
- * @param hasAlpha <code>cmap</code> has alpha values
- * @throws IllegalArgumentException if bits &lt; 1, bits &gt; 16, or size
- * &lt; 1.
- * @throws NullPointerException if <code>cmap</code> is <code>null</code>.
- */
- public IndexColorModel(int bits, int size, byte[] cmap, int start,
- boolean hasAlpha)
- {
- this(bits, size, cmap, start, hasAlpha, -1);
- }
-
- /**
- * Construct an IndexColorModel from an array of red, green, blue, and
- * optional alpha components. The component values are interleaved as RGB(A).
- *
- * @param bits the number of bits needed to represent <code>size</code>
- * colors
- * @param size the number of colors in the color map
- * @param cmap interleaved color components
- * @param start the offset of the first color component in <code>cmap</code>
- * @param hasAlpha <code>cmap</code> has alpha values
- * @param trans the index of the transparent color
- * @throws IllegalArgumentException if bits &lt; 1, bits &gt; 16, or size
- * &lt; 1.
- * @throws NullPointerException if <code>cmap</code> is <code>null</code>.
- */
- public IndexColorModel(int bits, int size, byte[] cmap, int start,
- boolean hasAlpha, int trans)
- {
- super(bits, nArray(8, hasAlpha || (0 <= trans && trans < size) ? 4 : 3),
- ColorSpace.getInstance(ColorSpace.CS_sRGB),
- hasAlpha || (0 <= trans && trans < size), false, OPAQUE,
- Buffers.smallestAppropriateTransferType(bits));
- if (bits < 1)
- throw new IllegalArgumentException("bits < 1");
- if (bits > 16)
- throw new IllegalArgumentException("bits > 16");
- if (size < 1)
- throw new IllegalArgumentException("size < 1");
- map_size = size;
- opaque = !hasAlpha;
-
- rgb = createColorMap(bits, size);
- if (hasAlpha)
- {
- int alpha;
- int alphaZero = 0x00; // use to detect all zeros
- int alphaOne = 0xff; // use to detect all ones
- for (int i = 0; i < size; i++) {
- alpha = cmap[4 * i + 3 + start] & 0xff;
- alphaZero = alphaZero | alpha;
- alphaOne = alphaOne & alpha;
- rgb[i] =
- ( alpha << 24
- // red
- | ((cmap[4 * i + start] & 0xff) << 16)
- // green
- | ((cmap[4 * i + 1 + start] & 0xff) << 8)
- // blue
- | (cmap[4 * i + 2 + start] & 0xff));
- }
- if (alphaZero == 0)
- transparency = BITMASK;
- else if (alphaOne == 255)
- transparency = (trans != -1 ? BITMASK : OPAQUE);
- else
- transparency = TRANSLUCENT;
- }
- else
- {
- for (int i = 0; i < size; i++)
- rgb[i] = (0xff000000
- // red
- | ((cmap[3 * i + start] & 0xff) << 16)
- // green
- | ((cmap[3 * i + 1 + start] & 0xff) << 8)
- // blue
- | (cmap[3 * i + 2 + start] & 0xff));
- if (trans != -1)
- transparency = BITMASK;
- }
-
- setTransparentPixel(trans);
-
- // Generate a bigint with 1's for every pixel
- validBits = validBits.setBit(size).subtract(BigInteger.ONE);
- }
-
- /**
- * Construct an IndexColorModel from an array of <code>size</code> packed
- * colors. Each int element contains 8-bit red, green, blue, and optional
- * alpha values packed in order. If hasAlpha is false, then all the colors
- * are opaque except for the transparent color.
- *
- * @param bits the number of bits needed to represent <code>size</code>
- * colors
- * @param size the number of colors in the color map
- * @param cmap packed color components
- * @param start the offset of the first color component in <code>cmap</code>
- * @param hasAlpha <code>cmap</code> has alpha values
- * @param trans the index of the transparent color
- * @param transferType {@link DataBuffer#TYPE_BYTE} or
- {@link DataBuffer#TYPE_USHORT}.
- * @throws IllegalArgumentException if bits &lt; 1, bits &gt; 16, or size
- * &lt; 1.
- * @throws IllegalArgumentException if <code>transferType</code> is something
- * other than {@link DataBuffer#TYPE_BYTE} or
- * {@link DataBuffer#TYPE_USHORT}.
- */
- public IndexColorModel(int bits, int size, int[] cmap, int start,
- boolean hasAlpha, int trans, int transferType)
- {
- super(bits,
- nArray(8, 4), // bits for each channel
- ColorSpace.getInstance(ColorSpace.CS_sRGB), // sRGB
- true, // has alpha
- false, // not premultiplied
- TRANSLUCENT, transferType);
- if (transferType != DataBuffer.TYPE_BYTE
- && transferType != DataBuffer.TYPE_USHORT)
- throw new IllegalArgumentException();
- if (bits > 16)
- throw new IllegalArgumentException("bits > 16");
- if (size < 1)
- throw new IllegalArgumentException("size < 1");
- map_size = size;
- opaque = !hasAlpha;
- rgb = createColorMap(bits, size);
- if (!hasAlpha)
- for (int i = 0; i < size; i++)
- rgb[i] = cmap[i + start] | 0xff000000;
- else
- System.arraycopy(cmap, start, rgb, 0, size);
-
- setTransparentPixel(trans);
-
- // Generate a bigint with 1's for every pixel
- validBits = validBits.setBit(size).subtract(BigInteger.ONE);
- }
-
- /**
- * Construct an IndexColorModel using a colormap with holes.
- * <br><br>
- * The IndexColorModel is built from the array of ints defining the
- * colormap. Each element contains red, green, blue, and alpha
- * components. The ColorSpace is sRGB. The transparency value is
- * automatically determined.
- * <br><br>
- * This constructor permits indicating which colormap entries are valid,
- * using the validBits argument. Each entry in cmap is valid if the
- * corresponding bit in validBits is set.
- *
- * @param bits the number of bits needed to represent <code>size</code>
- * colors.
- * @param size the number of colors in the color map.
- * @param cmap packed color components.
- * @param start the offset of the first color component in <code>cmap</code>.
- * @param transferType {@link DataBuffer#TYPE_BYTE} or
- * {@link DataBuffer#TYPE_USHORT}.
- * @param validBits a map of the valid entries in <code>cmap</code>.
- * @throws IllegalArgumentException if bits &lt; 1, bits &gt; 16, or size
- * &lt; 1.
- * @throws IllegalArgumentException if transferType is something other than
- * {@link DataBuffer#TYPE_BYTE} or {@link DataBuffer#TYPE_USHORT}.
- */
- public IndexColorModel(int bits, int size, int[] cmap, int start,
- int transferType, BigInteger validBits)
- {
- super(bits, // total bits, sRGB, four channels
- nArray(8, 4), // bits for each channel
- ColorSpace.getInstance(ColorSpace.CS_sRGB), // sRGB
- true, // has alpha
- false, // not premultiplied
- TRANSLUCENT, transferType);
- if (transferType != DataBuffer.TYPE_BYTE
- && transferType != DataBuffer.TYPE_USHORT)
- throw new IllegalArgumentException();
- if (bits > 16)
- throw new IllegalArgumentException("bits > 16");
- if (size < 1)
- throw new IllegalArgumentException("size < 1");
- map_size = size;
- opaque = false;
- this.trans = -1;
- this.validBits = validBits;
-
- rgb = createColorMap(bits, size);
- if (!hasAlpha)
- for (int i = 0; i < size; i++)
- rgb[i] = cmap[i + start] | 0xff000000;
- else
- System.arraycopy(cmap, start, rgb, 0, size);
- }
-
- /**
- * Returns the size of the color lookup table.
- *
- * @return The size of the color lookup table.
- */
- public final int getMapSize()
- {
- return map_size;
- }
-
- /**
- * Get the index of the transparent color in this color model.
- *
- * @return The index of the color that is considered transparent, or -1 if
- * there is no transparent color.
- */
- public final int getTransparentPixel()
- {
- return trans;
- }
-
- /**
- * Fills the supplied array with the red component of each color in the
- * lookup table.
- *
- * @param r an array that is at least as large as {@link #getMapSize()}.
- * @throws NullPointerException if <code>r</code> is <code>null</code>.
- * @throws ArrayIndexOutOfBoundsException if <code>r</code> has less
- * than {@link #getMapSize()} elements.
- */
- public final void getReds(byte[] r)
- {
- int i;
- for (i = 0; i < map_size; i++)
- r[i] = (byte) ((0x00FF0000 & rgb[i]) >> 16);
- }
-
- /**
- * Fills the supplied array with the green component of each color in the
- * lookup table.
- *
- * @param g an array that is at least as large as {@link #getMapSize()}.
- * @throws NullPointerException if <code>g</code> is <code>null</code>.
- * @throws ArrayIndexOutOfBoundsException if <code>g</code> has less
- * than {@link #getMapSize()} elements.
- */
- public final void getGreens(byte[] g)
- {
- int i;
- for (i = 0; i < map_size; i++)
- g[i] = (byte) ((0x0000FF00 & rgb[i]) >> 8);
- }
-
- /**
- * Fills the supplied array with the blue component of each color in the
- * lookup table.
- *
- * @param b an array that is at least as large as {@link #getMapSize()}.
- * @throws NullPointerException if <code>b</code> is <code>null</code>.
- * @throws ArrayIndexOutOfBoundsException if <code>b</code> has less
- * than {@link #getMapSize()} elements.
- */
- public final void getBlues(byte[] b)
- {
- int i;
- for (i = 0; i < map_size; i++)
- b[i] = (byte) (0x000000FF & rgb[i]);
- }
-
- /**
- * Fills the supplied array with the alpha component of each color in the
- * lookup table. If the model has a transparent pixel specified, the alpha
- * for that pixel will be 0.
- *
- * @param a an array that is at least as large as {@link #getMapSize()}.
- * @throws NullPointerException if <code>a</code> is <code>null</code>.
- * @throws ArrayIndexOutOfBoundsException if <code>a</code> has less
- * than {@link #getMapSize()} elements.
- */
- public final void getAlphas(byte[] a)
- {
- int i;
- for (i = 0; i < map_size; i++)
- if (i == trans)
- a[i] = (byte) 0;
- else
- a[i] = (byte) ((0xFF000000 & rgb[i]) >> 24);
- }
-
- /**
- * Returns the red component of the color in the lookup table for the
- * given pixel value.
- *
- * @param pixel the pixel lookup value.
- *
- * @return The red component of the color in the lookup table.
- * @throws ArrayIndexOutOfBoundsException if <code>pixel</code> is negative.
- */
- public final int getRed(int pixel)
- {
- if (pixel < map_size)
- return (0x00FF0000 & rgb[pixel]) >> 16;
-
- return 0;
- }
-
- /**
- * Returns the green component of the color in the lookup table for the
- * given pixel value.
- *
- * @param pixel the pixel lookup value.
- *
- * @return The green component of the color in the lookup table.
- * @throws ArrayIndexOutOfBoundsException if <code>pixel</code> is negative.
- */
- public final int getGreen(int pixel)
- {
- if (pixel < map_size)
- return (0x0000FF00 & rgb[pixel]) >> 8;
-
- return 0;
- }
-
- /**
- * Returns the blue component of the color in the lookup table for the
- * given pixel value.
- *
- * @param pixel the pixel lookup value.
- *
- * @return The blue component of the color in the lookup table.
- * @throws ArrayIndexOutOfBoundsException if <code>pixel</code> is negative.
- */
- public final int getBlue(int pixel)
- {
- if (pixel < map_size)
- return 0x000000FF & rgb[pixel];
-
- return 0;
- }
-
- /**
- * Returns the alpha component of the color in the lookup table for the
- * given pixel value. If no alpha channel was specified when the color model
- * was created, then 255 is returned for all pixels except the transparent
- * pixel (if one is defined - see {@link #getTransparentPixel()}) which
- * returns an alpha of 0.
- *
- * @param pixel the pixel lookup value.
- *
- * @return The alpha component of the color in the lookup table (in the
- * range 0 to 255).
- * @throws ArrayIndexOutOfBoundsException if <code>pixel</code> is negative.
- */
- public final int getAlpha(int pixel)
- {
- return (rgb[pixel] >> 24) & 0xFF;
- }
-
- /**
- * Get the RGB color value of the given pixel using the default
- * RGB color model.
- *
- * @param pixel the pixel lookup value.
- * @return The RGB color value.
- * @throws ArrayIndexOutOfBoundsException if <code>pixel</code> is negative.
- */
- public final int getRGB(int pixel)
- {
- if (pixel >= 0 && pixel < map_size)
- return rgb[pixel];
-
- return 0;
- }
-
- /**
- * Get the RGB color values of all pixels in the map using the default
- * RGB color model.
- *
- * @param rgb The destination array.
- */
- public final void getRGBs(int[] rgb)
- {
- System.arraycopy(this.rgb, 0, rgb, 0, map_size);
- }
-
- /**
- * Return <code>true</code> if the lookup table contains valid data for
- * <code>pixel</code>, and <code>false</code> otherwise.
- *
- * @param pixel the pixel value used to index the color lookup table.
- * @return <code>true</code> if <code>pixel</code> is valid,
- * <code>false</code> otherwise.
- */
- public boolean isValid(int pixel)
- {
- if (pixel >= 0)
- return validBits.testBit(pixel);
- return false;
- }
-
- /**
- * Return <code>true</code> if all pixels are valid, <code>false</code>
- * otherwise.
- *
- * @return <code>true</code> if all pixels are valid, <code>false</code>
- * otherwise.
- */
- public boolean isValid()
- {
- // Generate a bigint with 1's for every pixel
- BigInteger allbits = new BigInteger("0");
- allbits = allbits.setBit(map_size);
- allbits = allbits.subtract(new BigInteger("1"));
- return allbits.equals(validBits);
- }
-
- /**
- * Returns a binary value ({@link BigInteger}) where each bit represents an
- * entry in the color lookup table. If the bit is on, the entry is valid.
- *
- * @return The binary value.
- */
- public BigInteger getValidPixels()
- {
- return validBits;
- }
-
- /**
- * Construct a {@link BufferedImage} with rgb pixel values from a
- * {@link Raster}.
- *
- * Constructs a new BufferedImage in which each pixel is an RGBA int from
- * a Raster with index-valued pixels. If this model has no alpha component
- * or transparent pixel, the type of the new BufferedImage is TYPE_INT_RGB.
- * Otherwise the type is TYPE_INT_ARGB. If forceARGB is true, the type is
- * forced to be TYPE_INT_ARGB no matter what.
- *
- * @param raster The source of pixel values.
- * @param forceARGB True if type must be TYPE_INT_ARGB.
- * @return New BufferedImage with RBGA int pixel values.
- */
- public BufferedImage convertToIntDiscrete(Raster raster, boolean forceARGB)
- {
- int type = forceARGB ? BufferedImage.TYPE_INT_ARGB
- : ((opaque && trans == -1) ? BufferedImage.TYPE_INT_RGB :
- BufferedImage.TYPE_INT_ARGB);
-
- // FIXME: assuming that raster has only 1 band since pixels are supposed
- // to be int indexes.
- // FIXME: it would likely be more efficient to fetch a complete array,
- // but it would take much more memory.
- // FIXME: I'm not sure if transparent pixels or alpha values need special
- // handling here.
- BufferedImage im = new BufferedImage(raster.width, raster.height, type);
- for (int x = raster.minX; x < raster.width + raster.minX; x++)
- for (int y = raster.minY; y < raster.height + raster.minY; y++)
- im.setRGB(x, y, rgb[raster.getSample(x, y, 0)]);
-
- return im;
- }
-
- /**
- * Creates a {@link SampleModel} that is compatible to this color model.
- * This will be a {@link MultiPixelPackedSampleModel} for bits/pixel of
- * 1, 2 or 4, or a {@link ComponentColorModel} for the other cases.
- *
- * @param w the width of the sample model to create
- * @param h the height of the sample model to create
- *
- * @return a compatible sample model
- */
- public SampleModel createCompatibleSampleModel(int w, int h)
- {
- SampleModel sm;
- if (pixel_bits == 1 || pixel_bits == 2 || pixel_bits == 4)
- sm = new MultiPixelPackedSampleModel(transferType, w, h, pixel_bits);
- else
- sm = new ComponentSampleModel(transferType, w, h, 1, w, new int[]{0});
- return sm;
- }
-
- /**
- * Sets the transparent pixel. This is called by the various constructors.
- *
- * @param t the transparent pixel
- */
- private void setTransparentPixel(int t)
- {
- if (t >= 0 && t < map_size)
- {
- rgb[t] &= 0xffffff; // Make the value transparent.
- trans = t;
- if (transparency == OPAQUE)
- {
- transparency = BITMASK;
- hasAlpha = true;
- }
- }
- }
-
- private int[] createColorMap(int bits, int size)
- {
- // According to a Mauve test, the RI allocates at least 256 entries here.
- int realSize = Math.max(256, Math.max(1 << bits, size));
- return new int[realSize];
- }
-}
diff --git a/libjava/classpath/java/awt/image/Kernel.java b/libjava/classpath/java/awt/image/Kernel.java
deleted file mode 100644
index ae0ff14..0000000
--- a/libjava/classpath/java/awt/image/Kernel.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/* Kernel.java -- Java class for an image processing kernel
- Copyright (C) 2004, 2005, 2006, Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-/**
- * Kernel represents an image processing kernel. It gets used to hold
- * convolution filters among other purposes. It stores an array of float
- * values representing a 2-dimensional array in row-major order.
- *
- * @author Jerry Quinn (jlquinn@optonline.net)
- */
-public class Kernel implements Cloneable
-{
- /** The kernel width. */
- private final int width;
-
- /** The kernel height. */
- private final int height;
-
- /** Internal storage for the kernel's values. */
- private final float[] data;
-
- /**
- * Creates a new <code>Kernel</code> instance with the specified dimensions
- * and values. The first <code>width * height</code> values in the specified
- * <code>data</code> array are copied to internal storage.
- *
- * @param width the kernel width.
- * @param height the kernel height.
- * @param data the source data array (<code>null</code> not permitted).
- *
- * @throws IllegalArgumentException if <code>data.length</code> is less than
- * <code>width * height</code>.
- * @throws IllegalArgumentException if <code>width</code> or
- * <code>height</code> is less than zero.
- * @throws NullPointerException if <code>data</code> is <code>null</code>.
- */
- public Kernel(int width, int height, float[] data)
- throws IllegalArgumentException
- {
- this.width = width;
- this.height = height;
- if (data.length < width * height || width < 0 || height < 0)
- throw new IllegalArgumentException();
- this.data = new float[width * height];
- System.arraycopy(data, 0, this.data, 0, width * height);
- }
-
- /**
- * Returns the x-origin for the kernel, which is calculated as
- * <code>(width - 1) / 2</code>.
- *
- * @return The x-origin for the kernel.
- */
- public final int getXOrigin()
- {
- return (width - 1) / 2;
- }
-
- /**
- * Returns the y-origin for the kernel, which is calculated as
- * <code>(height - 1) / 2</code>.
- *
- * @return The y-origin for the kernel.
- */
- public final int getYOrigin()
- {
- return (height - 1) / 2;
- }
-
- /**
- * Returns the kernel width (as supplied to the constructor).
- *
- * @return The kernel width.
- */
- public final int getWidth()
- {
- return width;
- }
-
- /**
- * Returns the kernel height (as supplied to the constructor).
- *
- * @return The kernel height.
- */
- public final int getHeight()
- {
- return height;
- }
-
- /**
- * Returns an array containing a copy of the kernel data. If the
- * <code>data</code> argument is non-<code>null</code>, the kernel values
- * are copied into it and then <code>data</code> is returned as the result.
- * If the <code>data</code> argument is <code>null</code>, this method
- * allocates a new array then populates and returns it.
- *
- * @param data an array to copy the return values into (if
- * <code>null</code>, a new array is allocated).
- *
- * @return The array with copied values.
- *
- * @throws IllegalArgumentException if <code>data.length</code> is less than
- * the kernel's <code>width * height</code>.
- */
- public final float[] getKernelData(float[] data)
- throws IllegalArgumentException
- {
- if (data == null)
- return (float[]) this.data.clone();
-
- if (data.length < this.data.length)
- throw new IllegalArgumentException();
-
- System.arraycopy(this.data, 0, data, 0, this.data.length);
- return data;
- }
-
- /**
- * Returns a clone of this kernel.
- *
- * @return a clone of this Kernel.
- */
- public Object clone()
- {
- try
- {
- return super.clone();
- }
- catch (CloneNotSupportedException e)
- {
- throw (Error) new InternalError().initCause(e); // Impossible
- }
- }
-}
diff --git a/libjava/classpath/java/awt/image/LookupOp.java b/libjava/classpath/java/awt/image/LookupOp.java
deleted file mode 100644
index 0bc79a0..0000000
--- a/libjava/classpath/java/awt/image/LookupOp.java
+++ /dev/null
@@ -1,307 +0,0 @@
-/* LookupOp.java -- Filter that converts each pixel using a lookup table.
- Copyright (C) 2004 Free Software Foundation
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-import java.awt.RenderingHints;
-import java.awt.geom.Point2D;
-import java.awt.geom.Rectangle2D;
-
-/**
- * LookupOp is a filter that converts each pixel using a lookup table.
- *
- * For filtering Rasters, the lookup table must have either one component
- * that is applied to all bands, or one component for every band in the
- * Rasters.
- *
- * For BufferedImages, the lookup table may apply to both color and alpha
- * components. If the lookup table contains one component, or if there are
- * the same number of components as color components in the source, the table
- * applies to all color components. Otherwise the table applies to all
- * components including alpha. Alpha premultiplication is ignored during the
- * lookup filtering.
- *
- * After filtering, if color conversion is necessary, the conversion happens,
- * taking alpha premultiplication into account.
- *
- * @author jlquinn
- */
-public class LookupOp implements BufferedImageOp, RasterOp
-{
- private LookupTable lut;
- private RenderingHints hints;
-
- /**
- * Construct a new LookupOp using the given LookupTable.
- *
- * @param lookup LookupTable to use.
- * @param hints Rendering hints (can be null).
- */
- public LookupOp(LookupTable lookup, RenderingHints hints)
- {
- lut = lookup;
- this.hints = hints;
- }
-
- /**
- * Converts the source image using the lookup table specified in the
- * constructor. The resulting image is stored in the destination image if one
- * is provided; otherwise a new BufferedImage is created and returned.
- *
- * The source image cannot use an IndexColorModel, and the destination image
- * (if one is provided) must have the same size.
- *
- * @param src The source image.
- * @param dst The destination image.
- * @throws IllegalArgumentException if the rasters and/or color spaces are
- * incompatible.
- * @throws ArrayIndexOutOfBoundsException if a pixel in the source is not
- * contained in the LookupTable.
- * @return The convolved image.
- */
- public final BufferedImage filter(BufferedImage src, BufferedImage dst)
- {
- if (src.getColorModel() instanceof IndexColorModel)
- throw new IllegalArgumentException("LookupOp.filter: IndexColorModel "
- + "not allowed");
-
- if (lut.getNumComponents() != 1
- && lut.getNumComponents() != src.getColorModel().getNumComponents()
- && lut.getNumComponents() != src.getColorModel().getNumColorComponents())
- throw new IllegalArgumentException("LookupOp.filter: Incompatible " +
- "lookup table and source image");
-
- if (dst == null)
- dst = createCompatibleDestImage(src, null);
-
- else if (src.getHeight() != dst.getHeight() || src.getWidth() != dst.getWidth())
- throw new IllegalArgumentException("Source and destination images are " +
- "different sizes.");
-
- // Set up for potential colormodel mismatch
- BufferedImage tgt;
- if (dst.getColorModel().equals(src.getColorModel()))
- tgt = dst;
- else
- tgt = createCompatibleDestImage(src, src.getColorModel());
-
- Raster sr = src.getRaster();
- WritableRaster dr = tgt.getRaster();
-
- if (src.getColorModel().hasAlpha() &&
- (lut.getNumComponents() == 1 ||
- lut.getNumComponents() == src.getColorModel().getNumColorComponents()))
- {
- // Need to ignore alpha for lookup
- int[] dbuf = new int[src.getColorModel().getNumComponents()];
- int tmpBands = src.getColorModel().getNumColorComponents();
- int[] tmp = new int[tmpBands];
-
- // Filter the pixels
- for (int y = src.getMinY(); y < src.getHeight() + src.getMinY(); y++)
- for (int x = src.getMinX(); x < src.getWidth() + src.getMinX(); x++)
- {
- // Filter only color components, but also copy alpha
- sr.getPixel(x, y, dbuf);
- System.arraycopy(dbuf, 0, tmp, 0, tmpBands);
- dr.setPixel(x, y, lut.lookupPixel(tmp, dbuf));
-
- /* The reference implementation does not use LookupTable.lookupPixel,
- * but rather it seems to copy the table into a native array. The
- * effect of this (a probable bug in their implementation) is that
- * an out-of-bounds lookup on a ByteLookupTable will *not* throw an
- * out of bounds exception, but will instead return random garbage.
- * A bad lookup on a ShortLookupTable, however, will throw an
- * exception.
- *
- * Instead of mimicing this behaviour, we always throw an
- * ArrayOutofBoundsException by virtue of using
- * LookupTable.lookupPixle.
- */
- }
- }
- else
- {
- // No alpha to ignore
- int[] dbuf = new int[src.getColorModel().getNumComponents()];
-
- // Filter the pixels
- for (int y = src.getMinY(); y < src.getHeight() + src.getMinY(); y++)
- for (int x = src.getMinX(); x < src.getWidth() + src.getMinX(); x++)
- dr.setPixel(x, y, lut.lookupPixel(sr.getPixel(x, y, dbuf), dbuf));
- }
-
- if (tgt != dst)
- new ColorConvertOp(hints).filter(tgt, dst);
-
- return dst;
- }
-
- /* (non-Javadoc)
- * @see java.awt.image.BufferedImageOp#getBounds2D(java.awt.image.BufferedImage)
- */
- public final Rectangle2D getBounds2D(BufferedImage src)
- {
- return src.getRaster().getBounds();
- }
-
- /* (non-Javadoc)
- * @see java.awt.image.BufferedImageOp#createCompatibleDestImage(java.awt.image.BufferedImage, java.awt.image.ColorModel)
- */
- public BufferedImage createCompatibleDestImage(BufferedImage src,
- ColorModel dstCM)
- {
- if (dstCM != null)
- return new BufferedImage(dstCM,
- src.getRaster().createCompatibleWritableRaster(),
- src.isAlphaPremultiplied(), null);
-
- // This is a strange exception, done for compatibility with the reference
- // (as demonstrated by a mauve testcase)
- int imgType = src.getType();
- if (imgType == BufferedImage.TYPE_USHORT_GRAY)
- imgType = BufferedImage.TYPE_BYTE_GRAY;
-
- return new BufferedImage(src.getWidth(), src.getHeight(), imgType);
- }
-
- /**
- * Returns the corresponding destination point for a given source point.
- *
- * This Op will return the source point unchanged.
- *
- * @param src The source point.
- * @param dst The destination point.
- */
- public final Point2D getPoint2D(Point2D src, Point2D dst)
- {
- if (dst == null)
- return (Point2D) src.clone();
-
- dst.setLocation(src);
- return dst;
- }
-
- /**
- * Return the LookupTable for this op.
- *
- * @return The lookup table.
- */
- public final LookupTable getTable()
- {
- return lut;
- }
-
- /* (non-Javadoc)
- * @see java.awt.image.RasterOp#getRenderingHints()
- */
- public final RenderingHints getRenderingHints()
- {
- return hints;
- }
-
- /**
- * Filter a raster through a lookup table.
- *
- * Applies the lookup table for this Rasterop to each pixel of src and
- * puts the results in dest. If dest is null, a new Raster is created and
- * returned.
- *
- * @param src The source raster.
- * @param dest The destination raster.
- * @return The WritableRaster with the filtered pixels.
- * @throws IllegalArgumentException if lookup table has more than one
- * component but not the same as src and dest.
- * @throws ArrayIndexOutOfBoundsException if a pixel in the source is not
- * contained in the LookupTable.
- */
- public final WritableRaster filter(Raster src, WritableRaster dest)
- {
- if (dest == null)
- // Allocate a raster if needed
- dest = createCompatibleDestRaster(src);
- else
- if (src.getNumBands() != dest.getNumBands())
- throw new IllegalArgumentException("Source and destination rasters " +
- "are incompatible.");
-
- if (lut.getNumComponents() != 1
- && lut.getNumComponents() != src.getNumBands())
- throw new IllegalArgumentException("Lookup table is incompatible with " +
- "this raster.");
-
- // Allocate pixel storage.
- int[] tmp = new int[src.getNumBands()];
-
- // Filter the pixels
- for (int y = src.getMinY(); y < src.getHeight() + src.getMinY(); y++)
- for (int x = src.getMinX(); x < src.getWidth() + src.getMinX(); x++)
- dest.setPixel(x, y, lut.lookupPixel(src.getPixel(x, y, tmp), tmp));
-
- /* The reference implementation does not use LookupTable.lookupPixel,
- * but rather it seems to copy the table into a native array. The
- * effect of this (a probable bug in their implementation) is that
- * an out-of-bounds lookup on a ByteLookupTable will *not* throw an
- * out of bounds exception, but will instead return random garbage.
- * A bad lookup on a ShortLookupTable, however, will throw an
- * exception.
- *
- * Instead of mimicing this behaviour, we always throw an
- * ArrayOutofBoundsException by virtue of using
- * LookupTable.lookupPixle.
- */
- return dest;
- }
-
- /* (non-Javadoc)
- * @see java.awt.image.RasterOp#getBounds2D(java.awt.image.Raster)
- */
- public final Rectangle2D getBounds2D(Raster src)
- {
- return src.getBounds();
- }
-
- /* (non-Javadoc)
- * @see java.awt.image.RasterOp#createCompatibleDestRaster(java.awt.image.Raster)
- */
- public WritableRaster createCompatibleDestRaster(Raster src)
- {
- return src.createCompatibleWritableRaster();
- }
-
-}
diff --git a/libjava/classpath/java/awt/image/LookupTable.java b/libjava/classpath/java/awt/image/LookupTable.java
deleted file mode 100644
index d104b2f..0000000
--- a/libjava/classpath/java/awt/image/LookupTable.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/* LookupTable.java -- Java class for a pixel translation table.
- Copyright (C) 2004, 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-/**
- * LookupTable represents translation arrays for pixel values. It wraps one
- * or more data arrays for each layer (or component) in an image, such as
- * Alpha, R, G, and B. When doing translation, the offset is subtracted from
- * the pixel values to allow a subset of an array to be used.
- *
- * @see ByteLookupTable
- * @see ShortLookupTable
- *
- * @author Jerry Quinn (jlquinn@optonline.net)
- * @version 1.0
- */
-public abstract class LookupTable
-{
- // Not protected since that's part of the public API.
- int offset;
- int numComponents;
-
- /**
- * Creates a new <code>LookupTable</code> instance.
- *
- * If numComponents is 1, the same translation table is used for all pixel
- * components.
- *
- * @param offset Offset to be subtracted.
- * @param numComponents Number of image components.
- * @exception IllegalArgumentException if offset < 0 or numComponents < 1.
- */
- protected LookupTable(int offset, int numComponents)
- throws IllegalArgumentException
- {
- if (offset < 0 || numComponents < 1)
- throw new IllegalArgumentException();
- this.offset = offset;
- this.numComponents = numComponents;
- }
-
- /** Return the number of components. */
- public int getNumComponents()
- {
- return numComponents;
- }
-
- /** Return the offset. */
- public int getOffset()
- {
- return offset;
- }
-
-
- /**
- * Return translated values for a pixel.
- *
- * For each value in the pixel src, use the value minus offset as an index
- * in the component array and copy the value there to the output for the
- * component. If dest is null, the output is a new array, otherwise the
- * translated values are written to dest. Dest can be the same array as
- * src.
- *
- * For example, if the pixel src is [2, 4, 3], and offset is 1, the output
- * is [comp1[1], comp2[3], comp3[2]], where comp1, comp2, and comp3 are the
- * translation arrays.
- *
- * @param src Component values of a pixel.
- * @param dest Destination array for values, or null.
- * @return Translated values for the pixel.
- */
- public abstract int[] lookupPixel(int[] src, int[] dest);
-}
diff --git a/libjava/classpath/java/awt/image/MemoryImageSource.java b/libjava/classpath/java/awt/image/MemoryImageSource.java
deleted file mode 100644
index e8780f6..0000000
--- a/libjava/classpath/java/awt/image/MemoryImageSource.java
+++ /dev/null
@@ -1,429 +0,0 @@
-/* MemoryImageSource.java -- Java class for providing image data
- Copyright (C) 1999, 2004, 2006, Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-import java.util.Hashtable;
-import java.util.Vector;
-
-/**
- * An image producer that delivers image data from an array.
- */
-public class MemoryImageSource implements ImageProducer
-{
- private boolean animated = false;
- private boolean fullbuffers = false;
- private int[] pixeli;
- private int width;
- private int height;
- private int offset;
- private int scansize;
- private byte[] pixelb;
- private ColorModel cm;
- private Hashtable props = new Hashtable();
- private Vector consumers = new Vector();
-
- /**
- * Construct an image producer that reads image data from a byte
- * array.
- *
- * @param w width of image
- * @param h height of image
- * @param cm the color model used to represent pixel values
- * @param pix a byte array of pixel values
- * @param off the offset into the array at which the first pixel is stored
- * @param scan the number of array elements that represents a single pixel row
- */
- public MemoryImageSource(int w, int h, ColorModel cm, byte[] pix, int off,
- int scan)
- {
- this(w, h, cm, pix, off, scan, null);
- }
-
- /**
- * Constructs an ImageProducer from memory.
- *
- * @param w the image width.
- * @param h the image height.
- * @param cm the color model.
- * @param pix the image data.
- * @param off the offset to the first pixel in the array.
- * @param scan the number of array elements from a pixel on one row to the
- * corresponding pixel on the next row.
- * @param props image properties (<code>null</code> permitted).
- */
- public MemoryImageSource(int w, int h, ColorModel cm, byte[] pix, int off,
- int scan, Hashtable<?,?> props)
- {
- width = w;
- height = h;
- this.cm = cm;
- offset = off;
- scansize = scan;
- this.props = props;
- int max = ((scansize > width) ? scansize : width);
- pixelb = pix;
- }
-
- /**
- * Construct an image producer that reads image data from an
- * integer array.
- *
- * @param w width of image
- * @param h height of image
- * @param cm the color model used to represent pixel values
- * @param pix an integer array of pixel values
- * @param off the offset into the array at which the first pixel is stored
- * @param scan the number of array elements that represents a single pixel row
- */
- public MemoryImageSource(int w, int h, ColorModel cm, int[] pix, int off,
- int scan)
- {
- this(w, h, cm, pix, off, scan, null);
- }
-
- /**
- * Constructs an ImageProducer from memory
- *
- * @param w the image width.
- * @param h the image height.
- * @param cm the color model.
- * @param pix the image data.
- * @param off the offset to the first pixel in the array.
- * @param scan the number of array elements from a pixel on one row to the
- * corresponding pixel on the next row.
- * @param props image properties (<code>null</code> permitted).
- */
- public MemoryImageSource(int w, int h, ColorModel cm, int[] pix, int off,
- int scan, Hashtable<?,?> props)
- {
- width = w;
- height = h;
- this.cm = cm;
- offset = off;
- scansize = scan;
- this.props = props;
- int max = ((scansize > width) ? scansize : width);
- pixeli = pix;
- }
-
- /**
- * Constructs an ImageProducer from memory using the default RGB ColorModel.
- *
- * @param w the image width.
- * @param h the image height.
- * @param pix the image data.
- * @param off the offset to the first pixel in the array.
- * @param scan the number of array elements from a pixel on one row to the
- * corresponding pixel on the next row.
- * @param props image properties (<code>null</code> permitted).
-
- */
- public MemoryImageSource(int w, int h, int[] pix, int off, int scan,
- Hashtable<?,?> props)
- {
- this(w, h, ColorModel.getRGBdefault(), pix, off, scan, props);
- }
-
- /**
- * Constructs an ImageProducer from memory using the default RGB ColorModel.
- *
- * @param w the image width.
- * @param h the image height.
- * @param pix the image data.
- * @param off the offset to the first pixel in the array.
- * @param scan the number of array elements from a pixel on one row to the
- * corresponding pixel on the next row.
- */
- public MemoryImageSource(int w, int h, int[] pix, int off, int scan)
- {
- this(w, h, ColorModel.getRGBdefault(), pix, off, scan, null);
- }
-
- /**
- * Used to register an <code>ImageConsumer</code> with this
- * <code>ImageProducer</code>.
- *
- * @param ic the image consumer.
- */
- public synchronized void addConsumer(ImageConsumer ic)
- {
- if (consumers.contains(ic))
- return;
-
- consumers.addElement(ic);
- }
-
- /**
- * Used to determine if the given <code>ImageConsumer</code> is
- * already registered with this <code>ImageProducer</code>.
- *
- * @param ic the image consumer.
- */
- public synchronized boolean isConsumer(ImageConsumer ic)
- {
- if (consumers.contains(ic))
- return true;
- return false;
- }
-
- /**
- * Used to remove an <code>ImageConsumer</code> from the list of
- * registered consumers for this <code>ImageProducer</code>.
- *
- * @param ic the image consumer.
- */
- public synchronized void removeConsumer(ImageConsumer ic)
- {
- consumers.removeElement(ic);
- }
-
- /**
- * Used to register an <code>ImageConsumer</code> with this
- * <code>ImageProducer</code> and then immediately start
- * reconstruction of the image data to be delivered to all
- * registered consumers.
- */
- public void startProduction(ImageConsumer ic)
- {
- if (! (consumers.contains(ic)))
- consumers.addElement(ic);
-
- Vector list = (Vector) consumers.clone();
- for (int i = 0; i < list.size(); i++)
- {
- ic = (ImageConsumer) list.elementAt(i);
- sendPicture(ic);
- if (animated)
- ic.imageComplete(ImageConsumer.SINGLEFRAMEDONE);
- else
- ic.imageComplete(ImageConsumer.STATICIMAGEDONE);
- }
- }
-
- /**
- * Used to register an <code>ImageConsumer</code> with this
- * <code>ImageProducer</code> and then request that this producer
- * resend the image data in the order top-down, left-right.
- *
- * @param ic the image consumer.
- */
- public void requestTopDownLeftRightResend(ImageConsumer ic)
- {
- startProduction(ic);
- }
-
- /**
- * Changes a flag to indicate whether this MemoryImageSource supports
- * animations.
- *
- * @param animated A flag indicating whether this class supports animations
- */
- public synchronized void setAnimated(boolean animated)
- {
- this.animated = animated;
- }
-
- /**
- * A flag to indicate whether or not to send full buffer updates when
- * sending animation. If this flag is set then full buffers are sent
- * in the newPixels methods instead of just regions.
- *
- * @param fullbuffers a flag indicating whether to send the full buffers
- */
- public synchronized void setFullBufferUpdates(boolean fullbuffers)
- {
- this.fullbuffers = fullbuffers;
- }
-
- /**
- * Send an animation frame to the image consumers.
- */
- public void newPixels()
- {
- if (animated == true)
- {
- ImageConsumer ic;
- Vector list = (Vector) consumers.clone();
- for (int i = 0; i < list.size(); i++)
- {
- ic = (ImageConsumer) list.elementAt(i);
- sendPicture(ic);
- ic.imageComplete(ImageConsumer.SINGLEFRAME);
- }
- }
- }
-
- private void sendPicture(ImageConsumer ic)
- {
- ic.setHints(ImageConsumer.TOPDOWNLEFTRIGHT);
- if (props != null)
- ic.setProperties(props);
- ic.setDimensions(width, height);
- ic.setColorModel(cm);
- if (pixeli != null)
- ic.setPixels(0, 0, width, height, cm, pixeli, offset, scansize);
- else
- ic.setPixels(0, 0, width, height, cm, pixelb, offset, scansize);
- }
-
- /**
- * Send an animation frame to the image consumers containing the specified
- * pixels unless setFullBufferUpdates is set.
- *
- * @param x the x-coordinate.
- * @param y the y-coordinate.
- * @param w the width.
- * @param h the height.
- */
- public synchronized void newPixels(int x, int y, int w, int h)
- {
- if (animated == true)
- {
- if (fullbuffers)
- newPixels();
- else
- {
- ImageConsumer ic;
- Vector list = (Vector) consumers.clone();
- for (int i = 0; i < list.size(); i++)
- {
- ic = (ImageConsumer) list.elementAt(i);
- ic.setHints(ImageConsumer.TOPDOWNLEFTRIGHT);
- if (props != null)
- ic.setProperties(props);
- if (pixeli != null)
- {
- int[] pixelbuf = new int[w * h];
- for (int row = y; row < y + h; row++)
- System.arraycopy(pixeli, row * scansize + x + offset,
- pixelbuf, 0, w * h);
- ic.setPixels(x, y, w, h, cm, pixelbuf, 0, w);
- }
- else
- {
- byte[] pixelbuf = new byte[w * h];
- for (int row = y; row < y + h; row++)
- System.arraycopy(pixelb, row * scansize + x + offset,
- pixelbuf, 0, w * h);
-
- ic.setPixels(x, y, w, h, cm, pixelbuf, 0, w);
- }
- ic.imageComplete(ImageConsumer.SINGLEFRAME);
- }
- }
- }
- }
-
- /**
- * Send an animation frame to the image consumers containing the specified
- * pixels unless setFullBufferUpdates is set.
- *
- * If framenotify is set then a notification is sent when the frame
- * is sent otherwise no status is sent.
- *
- * @param x the x-coordinate.
- * @param y the y-coordinate.
- * @param w the width.
- * @param h the height.
- * @param framenotify send notification?
- */
- public synchronized void newPixels(int x, int y, int w, int h,
- boolean framenotify)
- {
- if (animated == true)
- {
- if (fullbuffers)
- newPixels();
- else
- {
- ImageConsumer ic;
- Vector list = (Vector) consumers.clone();
- for (int i = 0; i < list.size(); i++)
- {
- ic = (ImageConsumer) list.elementAt(i);
- ic.setHints(ImageConsumer.TOPDOWNLEFTRIGHT);
- if (props != null)
- ic.setProperties(props);
- if (pixeli != null)
- {
- int[] pixelbuf = new int[w * h];
- for (int row = y; row < y + h; row++)
- System.arraycopy(pixeli, row * scansize + x + offset,
- pixelbuf, 0, w * h);
- ic.setPixels(x, y, w, h, cm, pixelbuf, 0, w);
- }
- else
- {
- byte[] pixelbuf = new byte[w * h];
- for (int row = y; row < y + h; row++)
- System.arraycopy(pixelb, row * scansize + x + offset,
- pixelbuf, 0, w * h);
- ic.setPixels(x, y, w, h, cm, pixelbuf, 0, w);
- }
- if (framenotify == true)
- ic.imageComplete(ImageConsumer.SINGLEFRAME);
- }
- }
- }
- }
-
- public synchronized void newPixels(byte[] newpix, ColorModel newmodel,
- int offset, int scansize)
- {
- pixeli = null;
- pixelb = newpix;
- cm = newmodel;
- this.offset = offset;
- this.scansize = scansize;
- if (animated == true)
- newPixels();
- }
-
- public synchronized void newPixels(int[] newpix, ColorModel newmodel,
- int offset, int scansize)
- {
- pixelb = null;
- pixeli = newpix;
- cm = newmodel;
- this.offset = offset;
- this.scansize = scansize;
- if (animated == true)
- newPixels();
- }
-}
diff --git a/libjava/classpath/java/awt/image/MultiPixelPackedSampleModel.java b/libjava/classpath/java/awt/image/MultiPixelPackedSampleModel.java
deleted file mode 100644
index 592611c..0000000
--- a/libjava/classpath/java/awt/image/MultiPixelPackedSampleModel.java
+++ /dev/null
@@ -1,603 +0,0 @@
-/* Copyright (C) 2004, 2006, Free Software Foundation
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package java.awt.image;
-
-import gnu.java.awt.Buffers;
-import gnu.java.lang.CPStringBuilder;
-
-/**
- * MultiPixelPackedSampleModel provides a single band model that supports
- * multiple pixels in a single unit. Pixels have 2^n bits and 2^k pixels fit
- * per data element.
- *
- * @author Jerry Quinn (jlquinn@optonline.net)
- */
-public class MultiPixelPackedSampleModel extends SampleModel
-{
- private int scanlineStride;
- private int[] bitMasks;
- private int[] bitOffsets;
- private int[] sampleSize;
- private int dataBitOffset;
- private int elemBits;
- private int numberOfBits;
- private int numElems;
-
- /**
- * Creates a new <code>MultiPixelPackedSampleModel</code> with the specified
- * data type, which should be one of:
- * <ul>
- * <li>{@link DataBuffer#TYPE_BYTE};</li>
- * <li>{@link DataBuffer#TYPE_USHORT};</li>
- * <li>{@link DataBuffer#TYPE_INT};</li>
- * </ul>
- *
- * @param dataType the data type.
- * @param w the width (in pixels).
- * @param h the height (in pixels).
- * @param numberOfBits the number of bits per pixel (must be a power of 2).
- */
- public MultiPixelPackedSampleModel(int dataType, int w, int h,
- int numberOfBits)
- {
- this(dataType, w, h, numberOfBits, 0, 0);
- }
-
- /**
- * Creates a new <code>MultiPixelPackedSampleModel</code> with the specified
- * data type, which should be one of:
- * <ul>
- * <li>{@link DataBuffer#TYPE_BYTE};</li>
- * <li>{@link DataBuffer#TYPE_USHORT};</li>
- * <li>{@link DataBuffer#TYPE_INT};</li>
- * </ul>
- *
- * @param dataType the data type.
- * @param w the width (in pixels).
- * @param h the height (in pixels).
- * @param numberOfBits the number of bits per pixel (must be a power of 2).
- * @param scanlineStride the number of data elements from a pixel on one
- * row to the corresponding pixel in the next row.
- * @param dataBitOffset the offset to the first data bit.
- */
- public MultiPixelPackedSampleModel(int dataType, int w, int h,
- int numberOfBits, int scanlineStride,
- int dataBitOffset)
- {
- super(dataType, w, h, 1);
-
- switch (dataType)
- {
- case DataBuffer.TYPE_BYTE:
- elemBits = 8;
- break;
- case DataBuffer.TYPE_USHORT:
- elemBits = 16;
- break;
- case DataBuffer.TYPE_INT:
- elemBits = 32;
- break;
- default:
- throw new IllegalArgumentException("MultiPixelPackedSampleModel"
- + " unsupported dataType");
- }
-
- this.dataBitOffset = dataBitOffset;
-
- this.numberOfBits = numberOfBits;
- if (numberOfBits > elemBits)
- throw new RasterFormatException("MultiPixelPackedSampleModel pixel size"
- + " larger than dataType");
- switch (numberOfBits)
- {
- case 1: case 2: case 4: case 8: case 16: case 32: break;
- default:
- throw new RasterFormatException("MultiPixelPackedSampleModel pixel"
- + " size not 2^n bits");
- }
- numElems = elemBits / numberOfBits;
-
- // Compute scan line large enough for w pixels.
- if (scanlineStride == 0)
- scanlineStride = ((dataBitOffset + w * numberOfBits) - 1) / elemBits + 1;
- this.scanlineStride = scanlineStride;
-
-
- sampleSize = new int[1];
- sampleSize[0] = numberOfBits;
-
- bitMasks = new int[numElems];
- bitOffsets = new int[numElems];
- for (int i=0; i < numElems; i++)
- {
- bitOffsets[numElems - i- 1] = numberOfBits * i;
- bitMasks[numElems - i - 1] = ((1 << numberOfBits) - 1) <<
- bitOffsets[numElems - i - 1];
- }
- }
-
- /**
- * Creates a new <code>MultiPixelPackedSample</code> model with the same
- * data type and bits per pixel as this model, but with the specified
- * dimensions.
- *
- * @param w the width (in pixels).
- * @param h the height (in pixels).
- *
- * @return The new sample model.
- */
- public SampleModel createCompatibleSampleModel(int w, int h)
- {
- /* FIXME: We can avoid recalculation of bit offsets and sample
- sizes here by passing these from the current instance to a
- special private constructor. */
- return new MultiPixelPackedSampleModel(dataType, w, h, numberOfBits);
- }
-
- /**
- * Creates a DataBuffer for holding pixel data in the format and
- * layout described by this SampleModel. The returned buffer will
- * consist of one single bank.
- *
- * @return A new data buffer.
- */
- public DataBuffer createDataBuffer()
- {
- int size = scanlineStride * height;
- if (dataBitOffset > 0)
- size += (dataBitOffset - 1) / elemBits + 1;
- return Buffers.createBuffer(getDataType(), size);
- }
-
- /**
- * Returns the number of data elements required to transfer a pixel in the
- * get/setDataElements() methods.
- *
- * @return <code>1</code>.
- */
- public int getNumDataElements()
- {
- return 1;
- }
-
- /**
- * Returns an array containing the size (in bits) of the samples in each
- * band. The <code>MultiPixelPackedSampleModel</code> class supports only
- * one band, so this method returns an array with length <code>1</code>.
- *
- * @return An array containing the size (in bits) of the samples in band zero.
- *
- * @see #getSampleSize(int)
- */
- public int[] getSampleSize()
- {
- return (int[]) sampleSize.clone();
- }
-
- /**
- * Returns the size of the samples in the specified band. Note that the
- * <code>MultiPixelPackedSampleModel</code> supports only one band -- this
- * method ignored the <code>band</code> argument, and always returns the size
- * of band zero.
- *
- * @param band the band (this parameter is ignored).
- *
- * @return The size of the samples in band zero.
- *
- * @see #getSampleSize()
- */
- public int getSampleSize(int band)
- {
- return sampleSize[0];
- }
-
- /**
- * Returns the index in the data buffer that stores the pixel at (x, y).
- *
- * @param x the x-coordinate.
- * @param y the y-coordinate.
- *
- * @return The index in the data buffer that stores the pixel at (x, y).
- *
- * @see #getBitOffset(int)
- */
- public int getOffset(int x, int y)
- {
- return scanlineStride * y + ((dataBitOffset + x * numberOfBits) / elemBits);
- }
-
- /**
- * The bit offset (within an element in the data buffer) of the pixels with
- * the specified x-coordinate.
- *
- * @param x the x-coordinate.
- *
- * @return The bit offset.
- */
- public int getBitOffset(int x)
- {
- return (dataBitOffset + x * numberOfBits) % elemBits;
- }
-
- /**
- * Returns the offset to the first data bit.
- *
- * @return The offset to the first data bit.
- */
- public int getDataBitOffset()
- {
- return dataBitOffset;
- }
-
- /**
- * Returns the number of data elements from a pixel in one row to the
- * corresponding pixel in the next row.
- *
- * @return The scanline stride.
- */
- public int getScanlineStride()
- {
- return scanlineStride;
- }
-
- /**
- * Returns the number of bits per pixel.
- *
- * @return The number of bits per pixel.
- */
- public int getPixelBitStride()
- {
- return numberOfBits;
- }
-
- /**
- * Returns the transfer type, which is one of the following (depending on
- * the number of bits per sample for this model):
- * <ul>
- * <li>{@link DataBuffer#TYPE_BYTE};</li>
- * <li>{@link DataBuffer#TYPE_USHORT};</li>
- * <li>{@link DataBuffer#TYPE_INT};</li>
- * </ul>
- *
- * @return The transfer type.
- */
- public int getTransferType()
- {
- if (numberOfBits <= DataBuffer.getDataTypeSize(DataBuffer.TYPE_BYTE))
- return DataBuffer.TYPE_BYTE;
- else if (numberOfBits <= DataBuffer.getDataTypeSize(DataBuffer.TYPE_USHORT))
- return DataBuffer.TYPE_USHORT;
- return DataBuffer.TYPE_INT;
- }
-
- /**
- * Normally this method returns a sample model for accessing a subset of
- * bands of image data, but since <code>MultiPixelPackedSampleModel</code>
- * only supports a single band, this overridden implementation just returns
- * a new instance of <code>MultiPixelPackedSampleModel</code>, with the same
- * attributes as this instance.
- *
- * @param bands the bands to include in the subset (this is ignored, except
- * that if it is non-<code>null</code> a check is made to ensure that the
- * array length is equal to <code>1</code>).
- *
- * @throws RasterFormatException if <code>bands</code> is not
- * <code>null</code> and <code>bands.length != 1</code>.
- */
- public SampleModel createSubsetSampleModel(int[] bands)
- {
- if (bands != null && bands.length != 1)
- throw new RasterFormatException("MultiPixelPackedSampleModel only"
- + " supports one band");
- return new MultiPixelPackedSampleModel(dataType, width, height,
- numberOfBits, scanlineStride, dataBitOffset);
- }
-
- /**
- * Extract one pixel and return in an array of transfer type.
- *
- * Extracts the pixel at x, y from data and stores into the 0th index of the
- * array obj, since there is only one band. If obj is null, a new array of
- * getTransferType() is created.
- *
- * @param x The x-coordinate of the pixel rectangle to store in
- * <code>obj</code>.
- * @param y The y-coordinate of the pixel rectangle to store in
- * <code>obj</code>.
- * @param obj The primitive array to store the pixels into or null to force
- * creation.
- * @param data The DataBuffer that is the source of the pixel data.
- * @return The primitive array containing the pixel data.
- * @see java.awt.image.SampleModel#getDataElements(int, int, Object,
- * DataBuffer)
- */
- public Object getDataElements(int x, int y, Object obj, DataBuffer data)
- {
- int pixel = getSample(x, y, 0, data);
- switch (getTransferType())
- {
- case DataBuffer.TYPE_BYTE:
- if (obj == null)
- obj = new byte[1];
- ((byte[]) obj)[0] = (byte) pixel;
- return obj;
- case DataBuffer.TYPE_USHORT:
- if (obj == null)
- obj = new short[1];
- ((short[]) obj)[0] = (short) pixel;
- return obj;
- case DataBuffer.TYPE_INT:
- if (obj == null)
- obj = new int[1];
- ((int[]) obj)[0] = pixel;
- return obj;
- default:
- // Seems like the only sensible thing to do.
- throw new ClassCastException();
- }
- }
-
- /**
- * Returns an array (of length 1) containing the sample for the pixel at
- * (x, y) in the specified data buffer. If <code>iArray</code> is not
- * <code>null</code>, it will be populated with the sample value and
- * returned as the result of this function (this avoids allocating a new
- * array instance).
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param iArray an array to populate with the sample values and return as
- * the result (if <code>null</code>, a new array will be allocated).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @return An array containing the pixel sample value.
- *
- * @throws NullPointerException if <code>data</code> is <code>null</code>.
- */
- public int[] getPixel(int x, int y, int[] iArray, DataBuffer data)
- {
- if (iArray == null)
- iArray = new int[1];
- iArray[0] = getSample(x, y, 0, data);
- return iArray;
- }
-
- /**
- * Returns the sample value for the pixel at (x, y) in the specified data
- * buffer.
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param b the band (in the range <code>0</code> to
- * <code>getNumBands() - 1</code>).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @return The sample value.
- *
- * @throws NullPointerException if <code>data</code> is <code>null</code>.
- */
- public int getSample(int x, int y, int b, DataBuffer data)
- {
- int pos =
- ((dataBitOffset + x * numberOfBits) % elemBits) / numberOfBits;
- int offset = getOffset(x, y);
- int samples = data.getElem(offset);
- return (samples & bitMasks[pos]) >>> bitOffsets[pos];
- }
-
- /**
- * Set the pixel at x, y to the value in the first element of the primitive
- * array obj.
- *
- * @param x The x-coordinate of the data elements in <code>obj</code>.
- * @param y The y-coordinate of the data elements in <code>obj</code>.
- * @param obj The primitive array containing the data elements to set.
- * @param data The DataBuffer to store the data elements into.
- */
- public void setDataElements(int x, int y, Object obj, DataBuffer data)
- {
- int transferType = getTransferType();
- try
- {
- switch (transferType)
- {
- case DataBuffer.TYPE_BYTE:
- {
- byte[] in = (byte[]) obj;
- setSample(x, y, 0, in[0] & 0xFF, data);
- return;
- }
- case DataBuffer.TYPE_USHORT:
- {
- short[] in = (short[]) obj;
- setSample(x, y, 0, in[0] & 0xFFFF, data);
- return;
- }
- case DataBuffer.TYPE_INT:
- {
- int[] in = (int[]) obj;
- setSample(x, y, 0, in[0], data);
- return;
- }
- default:
- throw new ClassCastException("Unsupported data type");
- }
- }
- catch (ArrayIndexOutOfBoundsException aioobe)
- {
- String msg = "While writing data elements" +
- ", x=" + x + ", y=" + y +
- ", width=" + width + ", height=" + height +
- ", scanlineStride=" + scanlineStride +
- ", offset=" + getOffset(x, y) +
- ", data.getSize()=" + data.getSize() +
- ", data.getOffset()=" + data.getOffset() +
- ": " + aioobe;
- throw new ArrayIndexOutOfBoundsException(msg);
- }
- }
-
- /**
- * Sets the sample value for the pixel at (x, y) in the specified data
- * buffer to the specified value.
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param iArray the sample value (<code>null</code> not permitted).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @throws NullPointerException if either <code>iArray</code> or
- * <code>data</code> is <code>null</code>.
- *
- * @see #setSample(int, int, int, int, DataBuffer)
- */
- public void setPixel(int x, int y, int[] iArray, DataBuffer data)
- {
- setSample(x, y, 0, iArray[0], data);
- }
-
- /**
- * Sets the sample value for a band for the pixel at (x, y) in the
- * specified data buffer.
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param b the band (in the range <code>0</code> to
- * <code>getNumBands() - 1</code>).
- * @param s the sample value.
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @throws NullPointerException if <code>data</code> is <code>null</code>.
- */
- public void setSample(int x, int y, int b, int s, DataBuffer data)
- {
- int bitpos =
- ((dataBitOffset + x * numberOfBits) % elemBits) / numberOfBits;
- int offset = getOffset(x, y);
-
- s = s << bitOffsets[bitpos];
- s = s & bitMasks[bitpos];
-
- int sample = data.getElem(offset);
- sample |= s;
- data.setElem(offset, sample);
- }
-
- /**
- * Tests this sample model for equality with an arbitrary object. This
- * method returns <code>true</code> if and only if:
- * <ul>
- * <li><code>obj</code> is not <code>null</code>;
- * <li><code>obj</code> is an instance of
- * <code>MultiPixelPackedSampleModel</code>;
- * <li>both models have the same:
- * <ul>
- * <li><code>dataType</code>;
- * <li><code>width</code>;
- * <li><code>height</code>;
- * <li><code>numberOfBits</code>;
- * <li><code>scanlineStride</code>;
- * <li><code>dataBitOffsets</code>.
- * </ul>
- * </li>
- * </ul>
- *
- * @param obj the object (<code>null</code> permitted)
- *
- * @return <code>true</code> if this model is equal to <code>obj</code>, and
- * <code>false</code> otherwise.
- */
- public boolean equals(Object obj)
- {
- if (this == obj)
- return true;
- if (! (obj instanceof MultiPixelPackedSampleModel))
- return false;
- MultiPixelPackedSampleModel that = (MultiPixelPackedSampleModel) obj;
- if (this.dataType != that.dataType)
- return false;
- if (this.width != that.width)
- return false;
- if (this.height != that.height)
- return false;
- if (this.numberOfBits != that.numberOfBits)
- return false;
- if (this.scanlineStride != that.scanlineStride)
- return false;
- if (this.dataBitOffset != that.dataBitOffset)
- return false;
- return true;
- }
-
- /**
- * Returns a hash code for this <code>MultiPixelPackedSampleModel</code>.
- *
- * @return A hash code.
- */
- public int hashCode()
- {
- // this hash code won't match Sun's, but that shouldn't matter...
- int result = 193;
- result = 37 * result + dataType;
- result = 37 * result + width;
- result = 37 * result + height;
- result = 37 * result + numberOfBits;
- result = 37 * result + scanlineStride;
- result = 37 * result + dataBitOffset;
- return result;
- }
-
- /**
- * Creates a String with some information about this SampleModel.
- * @return A String describing this SampleModel.
- * @see java.lang.Object#toString()
- */
- public String toString()
- {
- CPStringBuilder result = new CPStringBuilder();
- result.append(getClass().getName());
- result.append("[");
- result.append("scanlineStride=").append(scanlineStride);
- for(int i=0; i < bitMasks.length; i+=1)
- {
- result.append(", mask[").append(i).append("]=0x").append(Integer.toHexString(bitMasks[i]));
- }
-
- result.append("]");
- return result.toString();
- }
-}
diff --git a/libjava/classpath/java/awt/image/PackedColorModel.java b/libjava/classpath/java/awt/image/PackedColorModel.java
deleted file mode 100644
index a89d73b..0000000
--- a/libjava/classpath/java/awt/image/PackedColorModel.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/* Copyright (C) 2000, 2002, 2004 Free Software Foundation
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-import gnu.java.awt.BitMaskExtent;
-
-import java.awt.Point;
-import java.awt.color.ColorSpace;
-
-/**
- * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
- */
-public abstract class PackedColorModel extends ColorModel
-{
- private int masks[];
-
- /* Package accessibility, the DirectColorModel needs this array */
- int shifts[];
-
- public PackedColorModel(ColorSpace cspace, int pixelBits,
- int[] colorMaskArray, int alphaMask,
- boolean isAlphaPremultiplied,
- int transparency,
- int transferType)
- {
- super(pixelBits, calcBitsPerComponent(colorMaskArray, alphaMask),
- cspace, (alphaMask != 0), isAlphaPremultiplied, transparency,
- transferType);
- initMasks(colorMaskArray, alphaMask);
- if ((pixelBits<1) || (pixelBits>32)) {
- throw new IllegalArgumentException("pixels per bits must be " +
- "in the range [1, 32]");
- }
- }
-
- private static int[] calcBitsPerComponent(int[] colorMaskArray,
- int alphaMask)
- {
- int numComponents = colorMaskArray.length;
- if (alphaMask != 0) numComponents++;
-
- int[] bitsPerComponent = new int[numComponents];
-
- BitMaskExtent extent = new BitMaskExtent();
- for (int b=0; b<colorMaskArray.length; b++)
- {
- extent.setMask(colorMaskArray[b]);
- bitsPerComponent[b] = extent.bitWidth;
- }
- if (alphaMask != 0)
- {
- extent.setMask(alphaMask);
- bitsPerComponent[numComponents-1] = extent.bitWidth;
- }
- return bitsPerComponent;
- }
-
- /** Initializes the masks. */
- private void initMasks(int[] colorMaskArray, int alphaMask)
- {
- int numComponents = colorMaskArray.length;
- if (alphaMask == 0)
- {
- masks = colorMaskArray;
- }
- else
- {
- masks = new int[numComponents+1];
- System.arraycopy(colorMaskArray, 0,
- masks, 0,
- numComponents);
- masks[numComponents++] = alphaMask;
- }
-
- shifts = new int[numComponents];
-
- // Bit field handling have been moved to a utility class
- BitMaskExtent extent = new BitMaskExtent();
- for (int b=0; b<numComponents; b++)
- {
- extent.setMask(masks[b]);
- shifts[b] = extent.leastSignificantBit;
- }
- }
-
- public PackedColorModel(ColorSpace cspace, int pixelBits,
- int rmask, int gmask, int bmask,
- int amask, boolean isAlphaPremultiplied,
- int transparency,
- int transferType)
- {
- this(cspace, pixelBits, makeColorMaskArray(rmask, gmask, bmask),
- amask, isAlphaPremultiplied, transparency, transferType);
- }
-
- /* TODO: If there is a alpha mask, it is inefficient to create a
- color mask array that will be discarded when the alpha mask is
- appended. We should probably create a private constructor that
- takes a complete array of masks (color+alpha) as an
- argument. */
-
- private static int[] makeColorMaskArray(int rmask, int gmask, int bmask)
- {
- int[] colorMaskArray = { rmask, gmask, bmask };
- return colorMaskArray;
- }
-
- public final int getMask(int index)
- {
- return masks[index];
- }
-
- public final int[] getMasks()
- {
- return masks;
- }
-
- public SampleModel createCompatibleSampleModel(int w, int h)
- {
- return new SinglePixelPackedSampleModel(transferType, w, h, masks);
- }
-
- public boolean isCompatibleSampleModel(SampleModel sm)
- {
- if (!super.isCompatibleSampleModel(sm)) return false;
- if (!(sm instanceof SinglePixelPackedSampleModel)) return false;
-
- SinglePixelPackedSampleModel sppsm =
- (SinglePixelPackedSampleModel) sm;
- return java.util.Arrays.equals(sppsm.getBitMasks(), masks);
- }
-
- public WritableRaster getAlphaRaster(WritableRaster raster) {
- if (!hasAlpha()) return null;
-
- SampleModel sm = raster.getSampleModel();
- int[] alphaBand = { sm.getNumBands() - 1 };
- SampleModel alphaModel = sm.createSubsetSampleModel(alphaBand);
- DataBuffer buffer = raster.getDataBuffer();
- Point origin = new Point(0, 0);
- return Raster.createWritableRaster(alphaModel, buffer, origin);
- }
-
- public boolean equals(Object obj)
- {
- if (!super.equals(obj)) return false;
- if (!(obj instanceof PackedColorModel)) return false;
-
- PackedColorModel other = (PackedColorModel) obj;
-
- return java.util.Arrays.equals(masks, other.masks);
- }
-}
diff --git a/libjava/classpath/java/awt/image/PixelGrabber.java b/libjava/classpath/java/awt/image/PixelGrabber.java
deleted file mode 100644
index b83fab5..0000000
--- a/libjava/classpath/java/awt/image/PixelGrabber.java
+++ /dev/null
@@ -1,631 +0,0 @@
-/* PixelGrabber.java -- retrieve a subset of an image's data
- Copyright (C) 1999, 2003, 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-import java.awt.Image;
-import java.util.Hashtable;
-
-/**
- * PixelGrabber is an ImageConsumer that extracts a rectangular region
- * of pixels from an Image.
- */
-public class PixelGrabber implements ImageConsumer
-{
- int x, y, offset;
- int width = -1;
- int height = -1;
- int scansize = -1;
- boolean forceRGB = true;
-
- ColorModel model = ColorModel.getRGBdefault();
- int hints;
- Hashtable<?,?> props;
-
- int int_pixel_buffer[];
- boolean ints_delivered = false;
- byte byte_pixel_buffer[];
- boolean bytes_delivered = false;
-
- ImageProducer ip;
- int observerStatus;
- int consumerStatus;
-
- private Thread grabberThread;
- boolean grabbing = false;
-
- /**
- * Construct a PixelGrabber that will retrieve RGB data from a given
- * Image.
- *
- * The RGB data will be retrieved from a rectangular region
- * <code>(x, y, w, h)</code> within the image. The data will be
- * stored in the provided <code>pix</code> array, which must have
- * been initialized to a size of at least <code>w * h</code>. The
- * data for a pixel (m, n) in the grab rectangle will be stored at
- * <code>pix[(n - y) * scansize + (m - x) + off]</code>.
- *
- * @param img the Image from which to grab pixels
- * @param x the x coordinate, relative to <code>img</code>'s
- * top-left corner, of the grab rectangle's top-left pixel
- * @param y the y coordinate, relative to <code>img</code>'s
- * top-left corner, of the grab rectangle's top-left pixel
- * @param w the width of the grab rectangle, in pixels
- * @param h the height of the grab rectangle, in pixels
- * @param pix the array in which to store grabbed RGB pixel data
- * @param off the offset into the <code>pix</code> array at which to
- * start storing RGB data
- * @param scansize a set of <code>scansize</code> consecutive
- * elements in the <code>pix</code> array represents one row of
- * pixels in the grab rectangle
- */
- public PixelGrabber(Image img, int x, int y, int w, int h,
- int pix[], int off, int scansize)
- {
- this (img.getSource(), x, y, w, h, pix, off, scansize);
- }
-
- /**
- * Construct a PixelGrabber that will retrieve RGB data from a given
- * ImageProducer.
- *
- * The RGB data will be retrieved from a rectangular region
- * <code>(x, y, w, h)</code> within the image produced by
- * <code>ip</code>. The data will be stored in the provided
- * <code>pix</code> array, which must have been initialized to a
- * size of at least <code>w * h</code>. The data for a pixel (m, n)
- * in the grab rectangle will be stored at
- * <code>pix[(n - y) * scansize + (m - x) + off]</code>.
- *
- * @param ip the ImageProducer from which to grab pixels. This can
- * be null.
- * @param x the x coordinate of the grab rectangle's top-left pixel,
- * specified relative to the top-left corner of the image produced
- * by <code>ip</code>
- * @param y the y coordinate of the grab rectangle's top-left pixel,
- * specified relative to the top-left corner of the image produced
- * by <code>ip</code>
- * @param w the width of the grab rectangle, in pixels
- * @param h the height of the grab rectangle, in pixels
- * @param pix the array in which to store grabbed RGB pixel data
- * @param off the offset into the <code>pix</code> array at which to
- * start storing RGB data
- * @param scansize a set of <code>scansize</code> consecutive
- * elements in the <code>pix</code> array represents one row of
- * pixels in the grab rectangle
- */
- public PixelGrabber(ImageProducer ip, int x, int y, int w, int h,
- int pix[], int off, int scansize)
- {
- this.ip = ip;
- this.x = x;
- this.y = y;
- this.width = w;
- this.height = h;
- this.offset = off;
- this.scansize = scansize;
-
- int_pixel_buffer = pix;
- // Initialize the byte array in case ip sends us byte-formatted
- // pixel data.
- byte_pixel_buffer = new byte[pix.length * 4];
- }
-
- /**
- * Construct a PixelGrabber that will retrieve data from a given
- * Image.
- *
- * The RGB data will be retrieved from a rectangular region
- * <code>(x, y, w, h)</code> within the image. The data will be
- * stored in an internal array which can be accessed by calling
- * <code>getPixels</code>. The data for a pixel (m, n) in the grab
- * rectangle will be stored in the returned array at index
- * <code>(n - y) * scansize + (m - x) + off</code>.
- * If forceRGB is false, then the returned data will be not be
- * converted to RGB from its format in <code>img</code>.
- *
- * If <code>w</code> is negative, the width of the grab region will
- * be from x to the right edge of the image. Likewise, if
- * <code>h</code> is negative, the height of the grab region will be
- * from y to the bottom edge of the image.
- *
- * @param img the Image from which to grab pixels
- * @param x the x coordinate, relative to <code>img</code>'s
- * top-left corner, of the grab rectangle's top-left pixel
- * @param y the y coordinate, relative to <code>img</code>'s
- * top-left corner, of the grab rectangle's top-left pixel
- * @param w the width of the grab rectangle, in pixels
- * @param h the height of the grab rectangle, in pixels
- * @param forceRGB true to force conversion of the rectangular
- * region's pixel data to RGB
- */
- public PixelGrabber(Image img,
- int x, int y,
- int w, int h,
- boolean forceRGB)
- {
- this.ip = img.getSource();
-
- if (this.ip == null)
- throw new NullPointerException("The ImageProducer must not be null.");
-
- this.x = x;
- this.y = y;
- width = w;
- height = h;
- // If width or height is negative, postpone pixel buffer
- // initialization until setDimensions is called back by ip.
- if (width >= 0 && height >= 0)
- {
- int_pixel_buffer = new int[width * height];
- byte_pixel_buffer = new byte[width * height];
- }
- this.forceRGB = forceRGB;
- }
-
- /**
- * Start grabbing pixels.
- *
- * Spawns an image production thread that calls back to this
- * PixelGrabber's ImageConsumer methods.
- */
- public synchronized void startGrabbing()
- {
- // Make sure we're not already grabbing.
- if (grabbing == false)
- {
- grabbing = true;
- grabberThread = new Thread ()
- {
- public void run ()
- {
- try
- {
- ip.startProduction (PixelGrabber.this);
- }
- catch (Exception ex)
- {
- imageComplete(ImageConsumer.IMAGEABORTED);
- }
- }
- };
- grabberThread.start ();
- }
- }
-
- /**
- * Abort pixel grabbing.
- */
- public synchronized void abortGrabbing()
- {
- if (grabbing)
- {
- // Interrupt the grabbing thread.
- Thread moribund = grabberThread;
- grabberThread = null;
- moribund.interrupt();
-
- imageComplete (ImageConsumer.IMAGEABORTED);
- }
- }
-
- /**
- * Have our Image or ImageProducer start sending us pixels via our
- * ImageConsumer methods and wait for all pixels in the grab
- * rectangle to be delivered.
- *
- * @return true if successful, false on abort or error
- *
- * @throws InterruptedException if interrupted by another thread.
- */
- public synchronized boolean grabPixels() throws InterruptedException
- {
- return grabPixels(0);
- }
-
- /**
- * grabPixels's behavior depends on the value of <code>ms</code>.
- *
- * If ms < 0, return true if all pixels from the source image have
- * been delivered, false otherwise. Do not wait.
- *
- * If ms >= 0 then we request that our Image or ImageProducer start
- * delivering pixels to us via our ImageConsumer methods.
- *
- * If ms > 0, wait at most <code>ms</code> milliseconds for
- * delivery of all pixels within the grab rectangle.
- *
- * If ms == 0, wait until all pixels have been delivered.
- *
- * @return true if all pixels from the source image have been
- * delivered, false otherwise
- *
- * @throws InterruptedException if this thread is interrupted while
- * we are waiting for pixels to be delivered
- */
- public synchronized boolean grabPixels(long ms) throws InterruptedException
- {
- if (ms < 0)
- return ((observerStatus & (ImageObserver.FRAMEBITS
- | ImageObserver.ALLBITS)) != 0);
-
- // Spawn a new ImageProducer thread to send us the image data via
- // our ImageConsumer methods.
- startGrabbing();
-
- if (ms > 0)
- {
- long stop_time = System.currentTimeMillis() + ms;
- long time_remaining;
- while (grabbing)
- {
- time_remaining = stop_time - System.currentTimeMillis();
- if (time_remaining <= 0)
- break;
- wait (time_remaining);
- }
- abortGrabbing ();
- }
- else
- wait ();
-
- // If consumerStatus is non-zero then the image is done loading or
- // an error has occurred.
- if (consumerStatus != 0)
- return setObserverStatus ();
-
- return ((observerStatus & (ImageObserver.FRAMEBITS
- | ImageObserver.ALLBITS)) != 0);
- }
-
- // Set observer status flags based on the current consumer status
- // flags. Return true if the consumer flags indicate that the
- // image was loaded successfully, or false otherwise.
- private synchronized boolean setObserverStatus ()
- {
- boolean retval = false;
-
- if ((consumerStatus & IMAGEERROR) != 0)
- observerStatus |= ImageObserver.ERROR;
-
- if ((consumerStatus & IMAGEABORTED) != 0)
- observerStatus |= ImageObserver.ABORT;
-
- if ((consumerStatus & STATICIMAGEDONE) != 0)
- {
- observerStatus |= ImageObserver.ALLBITS;
- retval = true;
- }
-
- if ((consumerStatus & SINGLEFRAMEDONE) != 0)
- {
- observerStatus |= ImageObserver.FRAMEBITS;
- retval = true;
- }
-
- return retval;
- }
-
- /**
- * @return the status of the pixel grabbing thread, represented by a
- * bitwise OR of ImageObserver flags
- */
- public synchronized int getStatus()
- {
- return observerStatus;
- }
-
- /**
- * @return the width of the grab rectangle in pixels, or a negative
- * number if the ImageProducer has not yet called our setDimensions
- * method
- */
- public synchronized int getWidth()
- {
- return width;
- }
-
- /**
- * @return the height of the grab rectangle in pixels, or a negative
- * number if the ImageProducer has not yet called our setDimensions
- * method
- */
- public synchronized int getHeight()
- {
- return height;
- }
-
- /**
- * @return a byte array of pixel data if ImageProducer delivered
- * pixel data using the byte[] variant of setPixels, or an int array
- * otherwise
- */
- public synchronized Object getPixels()
- {
- if (ints_delivered)
- return int_pixel_buffer;
- else if (bytes_delivered)
- return byte_pixel_buffer;
- else
- return null;
- }
-
- /**
- * @return the ColorModel currently being used for the majority of
- * pixel data conversions
- */
- public synchronized ColorModel getColorModel()
- {
- return model;
- }
-
- /**
- * Our <code>ImageProducer</code> calls this method to indicate the
- * size of the image being produced.
- *
- * setDimensions is an ImageConsumer method. None of PixelGrabber's
- * ImageConsumer methods should be called by code that instantiates
- * a PixelGrabber. They are only made public so they can be called
- * by the PixelGrabber's ImageProducer.
- *
- * @param width the width of the image
- * @param height the height of the image
- */
- public synchronized void setDimensions(int width, int height)
- {
- // Our width wasn't set when we were constructed. Set our width
- // so that the grab region includes all pixels from x to the right
- // edge of the source image.
- if (this.width < 0)
- this.width = width - x;
-
- // Our height wasn't set when we were constructed. Set our height
- // so that the grab region includes all pixels from y to the
- // bottom edge of the source image.
- if (this.height < 0)
- this.height = height - y;
-
- if (scansize < 0)
- scansize = this.width;
-
- if (int_pixel_buffer == null)
- int_pixel_buffer = new int[this.width * this.height];
-
- if (byte_pixel_buffer == null)
- byte_pixel_buffer = new byte[this.width * this.height];
- }
-
- /**
- * Our <code>ImageProducer</code> may call this method to send us a
- * list of its image's properties.
- *
- * setProperties is an ImageConsumer method. None of PixelGrabber's
- * ImageConsumer methods should be called by code that instantiates
- * a PixelGrabber. They are only made public so they can be called
- * by the PixelGrabber's ImageProducer.
- *
- * @param props a list of properties associated with the image being
- * produced
- */
- public synchronized void setProperties(Hashtable<?,?> props)
- {
- this.props = props;
- }
-
- /**
- * Our ImageProducer will call <code>setColorModel</code> to
- * indicate the model used by the majority of calls to
- * <code>setPixels</code>. Each call to <code>setPixels</code>
- * could however indicate a different <code>ColorModel</code>.
- *
- * setColorModel is an ImageConsumer method. None of PixelGrabber's
- * ImageConsumer methods should be called by code that instantiates
- * a PixelGrabber. They are only made public so they can be called
- * by the PixelGrabber's ImageProducer.
- *
- * @param model the color model to be used most often by setPixels
- *
- * @see ColorModel
- */
- public synchronized void setColorModel(ColorModel model)
- {
- this.model = model;
- }
-
- /**
- * Our <code>ImageProducer</code> may call this method with a
- * bit mask of hints from any of <code>RANDOMPIXELORDER</code>,
- * <code>TOPDOWNLEFTRIGHT</code>, <code>COMPLETESCANLINES</code>,
- * <code>SINGLEPASS</code>, <code>SINGLEFRAME</code>.
- *
- * setHints is an ImageConsumer method. None of PixelGrabber's
- * ImageConsumer methods should be called by code that instantiates
- * a PixelGrabber. They are only made public so they can be called
- * by the PixelGrabber's ImageProducer.
- *
- * @param flags a bit mask of hints
- */
- public synchronized void setHints(int flags)
- {
- hints = flags;
- }
-
- /**
- * Our ImageProducer calls setPixels to deliver a subset of its
- * pixels.
- *
- * Each element of the pixels array represents one pixel. The
- * pixel data is formatted according to the color model model.
- * The x and y parameters are the coordinates of the rectangular
- * region of pixels being delivered to this ImageConsumer,
- * specified relative to the top left corner of the image being
- * produced. Likewise, w and h are the pixel region's dimensions.
- *
- * @param x x coordinate of pixel block
- * @param y y coordinate of pixel block
- * @param w width of pixel block
- * @param h height of pixel block
- * @param model color model used to interpret pixel data
- * @param pixels pixel block data
- * @param offset offset into pixels array
- * @param scansize width of one row in the pixel block
- */
- public synchronized void setPixels(int x, int y, int w, int h,
- ColorModel model, byte[] pixels,
- int offset, int scansize)
- {
- ColorModel currentModel;
- if (model != null)
- currentModel = model;
- else
- currentModel = this.model;
-
- for(int yp = y; yp < (y + h); yp++)
- {
- for(int xp = x; xp < (x + w); xp++)
- {
- // Check if the coordinates (xp, yp) are within the
- // pixel block that we are grabbing.
- if(xp >= this.x
- && yp >= this.y
- && xp < (this.x + this.width)
- && yp < (this.y + this.height))
- {
- int i = (yp - this.y) * this.scansize + (xp - this.x) + this.offset;
- int p = (yp - y) * scansize + (xp - x) + offset;
- if (forceRGB)
- {
- ints_delivered = true;
-
- int_pixel_buffer[i] = currentModel.getRGB (pixels[p] & 0xFF);
- }
- else
- {
- bytes_delivered = true;
-
- byte_pixel_buffer[i] = pixels[p];
- }
- }
- }
- }
- }
-
- /**
- * Our ImageProducer calls setPixels to deliver a subset of its
- * pixels.
- *
- * Each element of the pixels array represents one pixel. The
- * pixel data is formatted according to the color model model.
- * The x and y parameters are the coordinates of the rectangular
- * region of pixels being delivered to this ImageConsumer,
- * specified relative to the top left corner of the image being
- * produced. Likewise, w and h are the pixel region's dimensions.
- *
- * @param x x coordinate of pixel block
- * @param y y coordinate of pixel block
- * @param w width of pixel block
- * @param h height of pixel block
- * @param model color model used to interpret pixel data
- * @param pixels pixel block data
- * @param offset offset into pixels array
- * @param scansize width of one row in the pixel block
- */
- public synchronized void setPixels(int x, int y, int w, int h,
- ColorModel model, int[] pixels,
- int offset, int scansize)
- {
- ColorModel currentModel;
- if (model != null)
- currentModel = model;
- else
- currentModel = this.model;
-
- ints_delivered = true;
-
- for(int yp = y; yp < (y + h); yp++)
- {
- for(int xp = x; xp < (x + w); xp++)
- {
- // Check if the coordinates (xp, yp) are within the
- // pixel block that we are grabbing.
- if(xp >= this.x
- && yp >= this.y
- && xp < (this.x + this.width)
- && yp < (this.y + this.height))
- {
- int i = (yp - this.y) * this.scansize + (xp - this.x) + this.offset;
- int p = (yp - y) * scansize + (xp - x) + offset;
- if (forceRGB)
- int_pixel_buffer[i] = currentModel.getRGB (pixels[p]);
- else
- int_pixel_buffer[i] = pixels[p];
- }
- }
- }
- }
-
- /**
- * Our <code>ImageProducer</code> calls this method to inform us
- * that a single frame or the entire image is complete. The method
- * is also used to inform us of an error in loading or producing the
- * image.
- *
- * @param status the status of image production, represented by a
- * bitwise OR of ImageConsumer flags
- */
- public synchronized void imageComplete(int status)
- {
- consumerStatus = status;
- setObserverStatus ();
- grabbing = false;
- if (ip != null)
- ip.removeConsumer (this);
-
- notifyAll ();
- }
-
- /**
- * @return the return value of getStatus
- *
- * @specnote The newer getStatus should be used in place of status.
- */
- public synchronized int status()
- {
- return getStatus();
- }
-}
diff --git a/libjava/classpath/java/awt/image/PixelInterleavedSampleModel.java b/libjava/classpath/java/awt/image/PixelInterleavedSampleModel.java
deleted file mode 100644
index 13134b4..0000000
--- a/libjava/classpath/java/awt/image/PixelInterleavedSampleModel.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/* PixelInterleavedSampleModel.java
- Copyright (C) 2004, 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package java.awt.image;
-
-
-/**
- * A <code>SampleModel</code> that uses exactly one element of the
- * raster&#x2019;s {@link DataBuffer} per pixel, holds all bands in a
- * single bank, and stores band data in pixel-interleaved manner.
- *
- * @since 1.2
- *
- * @author Sascha Brawer (brawer@dandelis.ch)
- */
-public class PixelInterleavedSampleModel
- extends ComponentSampleModel
-{
- public PixelInterleavedSampleModel(int dataType, int width, int height,
- int pixelStride, int scanlineStride,
- int[] bandOffsets)
- {
- super(dataType, width, height, pixelStride, scanlineStride,
- bandOffsets);
- }
-
-
- /**
- * Creates a new <code>SampleModel</code> that is like this one, but
- * uses the specified width and height.
- *
- * @param width the number of pixels in the horizontal direction.
- *
- * @param height the number of pixels in the vertical direction.
- */
- public SampleModel createCompatibleSampleModel(int width, int height)
- {
- // Find minimum band offset.
- int minBandoff = bandOffsets[0];
- int numBands = bandOffsets.length;
- for (int i = 1; i < numBands; i++)
- {
- if (bandOffsets[i] < minBandoff)
- {
- minBandoff = bandOffsets[i];
- }
- }
- // Adjust band offsets so that minimum offset is at 0.
- int[] bandOff;
- if (minBandoff > 0)
- {
- bandOff = new int[numBands];
- for (int i = 0; i < numBands; i++)
- {
- bandOff[i] = bandOffsets[i] - minBandoff;
- }
- }
- else
- {
- bandOff = bandOffsets;
- }
- // Adjust scanline stride for new width.
- return new PixelInterleavedSampleModel(dataType, width, height,
- pixelStride, pixelStride * width,
- bandOff);
- }
-
-
- /**
- * Creates a new <code>SampleModel</code> that is like this one, but
- * uses only a subset of its bands.
- *
- * @param bands an array whose elements indicate which bands shall
- * be part of the subset. For example, <code>[0, 2, 3]</code> would
- * create a SampleModel containing bands #0, #2 and #3.
- */
- public SampleModel createSubsetSampleModel(int[] bands)
- {
- int[] subOffsets;
-
- subOffsets = new int[bands.length];
- for (int i = 0; i < bands.length; i++)
- subOffsets[i] = bandOffsets[bands[i]];
-
- return new PixelInterleavedSampleModel(dataType, width, height,
- pixelStride, scanlineStride,
- subOffsets);
- }
-}
diff --git a/libjava/classpath/java/awt/image/RGBImageFilter.java b/libjava/classpath/java/awt/image/RGBImageFilter.java
deleted file mode 100644
index 1354c3a..0000000
--- a/libjava/classpath/java/awt/image/RGBImageFilter.java
+++ /dev/null
@@ -1,265 +0,0 @@
-/* RGBImageFilter.java -- Java class for filtering Pixels by RGB values
- Copyright (C) 1999, 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-/**
- * A filter designed to filter images in the default RGBColorModel regardless of
- * the ImageProducer's ColorModel.
- *
- * @author Mark Benvenuto (mcb54@columbia.edu)
- */
-public abstract class RGBImageFilter extends ImageFilter
-{
- protected ColorModel origmodel;
-
- protected ColorModel newmodel;
-
- /**
- * Specifies whether to apply the filter to the index entries of the
- * IndexColorModel. Subclasses should set this to true if the filter
- * does not depend on the pixel's coordinate.
- */
- protected boolean canFilterIndexColorModel = false;
-
- /**
- * Construct new RGBImageFilter.
- */
- public RGBImageFilter()
- {
- }
-
- /**
- * Sets the ColorModel used to filter with. If the specified ColorModel is
- * IndexColorModel and canFilterIndexColorModel is true, we subsitute the
- * ColorModel for a filtered one here and in setPixels whenever the original
- * one appears. Otherwise overrides the default ColorModel of ImageProducer
- * and specifies the default RGBColorModel
- *
- * @param model the color model to be used most often by setPixels
- *
- * @see ColorModel
- */
- public void setColorModel(ColorModel model)
- {
- if ((model instanceof IndexColorModel) && canFilterIndexColorModel)
- {
- ColorModel newCM = filterIndexColorModel((IndexColorModel) model);
- substituteColorModel(model, newCM);
- consumer.setColorModel(newmodel);
- }
- else
- {
- consumer.setColorModel(ColorModel.getRGBdefault());
- }
- }
-
- /**
- * Registers a new ColorModel to subsitute for the old ColorModel when
- * setPixels encounters the a pixel with the old ColorModel. The pixel
- * remains unchanged except for a new ColorModel.
- *
- * @param oldcm the old ColorModel
- * @param newcm the new ColorModel
- */
- public void substituteColorModel(ColorModel oldcm, ColorModel newcm)
- {
- origmodel = oldcm;
- newmodel = newcm;
- }
-
- /**
- * Filters an IndexColorModel through the filterRGB function. Uses
- * coordinates of -1 to indicate its filtering an index and not a pixel.
- *
- * @param icm an IndexColorModel to filter
- */
- public IndexColorModel filterIndexColorModel(IndexColorModel icm)
- {
- int len = icm.getMapSize();
- byte[] reds = new byte[len];
- byte[] greens = new byte[len];
- byte[] blues = new byte[len];
- byte[] alphas = new byte[len];
-
- icm.getAlphas( alphas );
- icm.getReds( reds );
- icm.getGreens( greens );
- icm.getBlues( blues );
-
- int transparent = icm.getTransparentPixel();
- boolean needAlpha = false;
- for( int i = 0; i < len; i++ )
- {
- int rgb = filterRGB(-1, -1, icm.getRGB(i));
- alphas[i] = (byte) (rgb >> 24);
- if (alphas[i] != ((byte) 0xff) && i != transparent)
- needAlpha = true;
- reds[i] = (byte) (rgb >> 16);
- greens[i] = (byte) (rgb >> 8);
- blues[i] = (byte) (rgb);
- }
- IndexColorModel newIcm;
- if (needAlpha)
- newIcm = new IndexColorModel(icm.getPixelSize(), len, reds, greens,
- blues, alphas);
- else
- newIcm = new IndexColorModel(icm.getPixelSize(), len, reds, greens,
- blues, transparent);
- return newIcm;
- }
-
- /**
- * This functions filters a set of RGB pixels through filterRGB.
- *
- * @param x the x coordinate of the rectangle
- * @param y the y coordinate of the rectangle
- * @param w the width of the rectangle
- * @param h the height of the rectangle
- * @param pixels the array of pixel values
- * @param offset the index of the first pixels in the
- * <code>pixels</code> array
- * @param scansize the width to use in extracting pixels from the
- * <code>pixels</code> array
- */
- public void filterRGBPixels(int x, int y, int w, int h, int[] pixels,
- int offset, int scansize)
- {
- int index = offset;
- for (int yp = 0; yp < h; yp++)
- {
- for (int xp = 0; xp < w; xp++)
- {
- pixels[index] = filterRGB(xp + x, yp + y, pixels[index]);
- index++;
- }
- index += scansize - w;
- }
- consumer.setPixels(x, y, w, h, ColorModel.getRGBdefault(), pixels, offset,
- scansize);
- }
-
- /**
- * If the ColorModel is the same ColorModel which as already converted
- * then it converts it the converted ColorModel. Otherwise it passes the
- * array of pixels through filterRGBpixels.
- *
- * @param x the x coordinate of the rectangle
- * @param y the y coordinate of the rectangle
- * @param w the width of the rectangle
- * @param h the height of the rectangle
- * @param model the <code>ColorModel</code> used to translate the pixels
- * @param pixels the array of pixel values
- * @param offset the index of the first pixels in the <code>pixels</code>
- * array
- * @param scansize the width to use in extracting pixels from the
- * <code>pixels</code> array
- */
- public void setPixels(int x, int y, int w, int h, ColorModel model,
- byte[] pixels, int offset, int scansize)
- {
- if (model == origmodel)
- {
- consumer.setPixels(x, y, w, h, newmodel, pixels, offset, scansize);
- }
- else
- {
- int[] filtered = new int[w];
- int index = offset;
- for (int yp = 0; yp < h; yp++)
- {
- for (int xp = 0; xp < w; xp++)
- {
- filtered[xp] = model.getRGB((pixels[index] & 0xff));
- index++;
- }
- index += scansize - w;
- filterRGBPixels(x, y + yp, w, 1, filtered, 0, w);
- }
- }
- }
-
- /**
- * This function delivers a rectangle of pixels where any
- * pixel(m,n) is stored in the array as an <code>int</code> at
- * index (n * scansize + m + offset).
- *
- * @param x the x coordinate of the rectangle
- * @param y the y coordinate of the rectangle
- * @param w the width of the rectangle
- * @param h the height of the rectangle
- * @param model the <code>ColorModel</code> used to translate the pixels
- * @param pixels the array of pixel values
- * @param offset the index of the first pixels in the <code>pixels</code>
- * array
- * @param scansize the width to use in extracting pixels from the
- * <code>pixels</code> array
- */
- public void setPixels(int x, int y, int w, int h, ColorModel model,
- int[] pixels, int offset, int scansize)
- {
- if (model == origmodel)
- {
- consumer.setPixels(x, y, w, h, newmodel, pixels, offset, scansize);
- }
- else
- {
- int[] filtered = new int[w];
- int index = offset;
- for (int yp = 0; yp < h; yp++)
- {
- for (int xp = 0; xp < w; xp++)
- {
- filtered[xp] = model.getRGB((pixels[index]));
- index++;
- }
- index += scansize - w;
- filterRGBPixels(x, y + yp, w, 1, filtered, 0, w);
- }
- }
- }
-
- /**
- * Filters a single pixel from the default ColorModel.
- *
- * @param x x-coordinate
- * @param y y-coordinate
- * @param rgb color
- */
- public abstract int filterRGB(int x, int y, int rgb);
-}
diff --git a/libjava/classpath/java/awt/image/Raster.java b/libjava/classpath/java/awt/image/Raster.java
deleted file mode 100644
index 6d99c36..0000000
--- a/libjava/classpath/java/awt/image/Raster.java
+++ /dev/null
@@ -1,973 +0,0 @@
-/* Copyright (C) 2000, 2002, 2003, 2006, Free Software Foundation
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-import gnu.java.lang.CPStringBuilder;
-
-import java.awt.Point;
-import java.awt.Rectangle;
-
-/**
- * A rectangular collection of pixels composed from a {@link DataBuffer} which
- * stores the pixel values, and a {@link SampleModel} which is used to retrieve
- * the pixel values.
- *
- * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
- */
-public class Raster
-{
- /** The sample model used to access the pixel values. */
- protected SampleModel sampleModel;
-
- /** The data buffer used to store the pixel values. */
- protected DataBuffer dataBuffer;
-
- /** The x-coordinate of the top left corner of the raster. */
- protected int minX;
-
- /** The y-coordinate of the top left corner of the raster. */
- protected int minY;
-
- /** The width of the raster. */
- protected int width;
-
- /** The height of the raster. */
- protected int height;
-
- protected int sampleModelTranslateX;
-
- protected int sampleModelTranslateY;
-
- /** The number of bands. */
- protected int numBands;
-
- protected int numDataElements;
-
- /** The raster's parent. */
- protected Raster parent;
-
- /**
- * Creates a new raster.
- *
- * @param sampleModel the sample model.
- * @param origin the origin.
- */
- protected Raster(SampleModel sampleModel, Point origin)
- {
- this(sampleModel, sampleModel.createDataBuffer(), origin);
- }
-
- /**
- * Creates a new raster.
- *
- * @param sampleModel the sample model.
- * @param dataBuffer the data buffer.
- * @param origin the origin.
- */
- protected Raster(SampleModel sampleModel, DataBuffer dataBuffer,
- Point origin)
- {
- this(sampleModel, dataBuffer, new Rectangle(origin.x, origin.y,
- sampleModel.getWidth(), sampleModel.getHeight()), origin, null);
- }
-
- /**
- * Creates a new raster.
- *
- * @param sampleModel the sample model.
- * @param dataBuffer the data buffer.
- * @param aRegion the raster's bounds.
- * @param sampleModelTranslate the translation (<code>null</code> permitted).
- * @param parent the raster's parent.
- */
- protected Raster(SampleModel sampleModel, DataBuffer dataBuffer,
- Rectangle aRegion, Point sampleModelTranslate, Raster parent)
- {
- this.sampleModel = sampleModel;
- this.dataBuffer = dataBuffer;
- this.minX = aRegion.x;
- this.minY = aRegion.y;
- this.width = aRegion.width;
- this.height = aRegion.height;
-
- // If sampleModelTranslate is null, use (0,0). Methods such as
- // Raster.createRaster are specified to allow for a null argument.
- if (sampleModelTranslate != null)
- {
- this.sampleModelTranslateX = sampleModelTranslate.x;
- this.sampleModelTranslateY = sampleModelTranslate.y;
- }
-
- this.numBands = sampleModel.getNumBands();
- this.numDataElements = sampleModel.getNumDataElements();
- this.parent = parent;
- }
-
- /**
- * Creates an interleaved raster using the specified data type.
- *
- * @param dataType the data type.
- * @param w the width.
- * @param h the height.
- * @param bands the number of bands.
- * @param location
- *
- * @return The new raster.
- */
- public static WritableRaster createInterleavedRaster(int dataType,
- int w, int h, int bands, Point location)
- {
- int[] bandOffsets = new int[bands];
- // TODO: Maybe not generate this every time.
- for (int b = 0; b < bands; b++)
- bandOffsets[b] = b;
-
- int scanlineStride = bands * w;
- return createInterleavedRaster(dataType, w, h, scanlineStride, bands,
- bandOffsets, location);
- }
-
- /**
- * Creates an interleaved raster.
- *
- * @param dataType the data type.
- * @param w the width.
- * @param h the height.
- * @param scanlineStride the number of data elements from a sample on one
- * row to the corresponding sample on the next row.
- * @param pixelStride the number of elements from a sample in one pixel to
- * the corresponding sample in the next pixel.
- * @param bandOffsets the band offsets.
- * @param location
- *
- * @return The new raster.
- */
- public static WritableRaster createInterleavedRaster(int dataType,
- int w, int h, int scanlineStride, int pixelStride, int[] bandOffsets,
- Point location)
- {
- SampleModel sm = new ComponentSampleModel(dataType, w, h, pixelStride,
- scanlineStride, bandOffsets);
- return createWritableRaster(sm, location);
- }
-
- /**
- * Creates a new banded raster.
- *
- * @param dataType the data type.
- * @param w the width.
- * @param h the height.
- * @param bands the number of bands.
- * @param location
- *
- * @return The new raster.
- */
- public static WritableRaster createBandedRaster(int dataType, int w, int h,
- int bands, Point location)
- {
- SampleModel sm = new BandedSampleModel(dataType, w, h, bands);
- return createWritableRaster(sm, location);
- }
-
- /**
- * Creates a new banded raster.
- *
- * @param dataType the data type.
- * @param w the width.
- * @param h the height.
- * @param scanlineStride the number of data elements from a sample on one
- * row to the corresponding sample on the next row.
- * @param bankIndices the index for each bank.
- * @param bandOffsets the offset for each band.
- * @param location
- *
- * @return The new raster.
- */
- public static WritableRaster createBandedRaster(int dataType, int w, int h,
- int scanlineStride, int[] bankIndices, int[] bandOffsets, Point location)
- {
- SampleModel sm = new BandedSampleModel(dataType, w, h, scanlineStride,
- bankIndices, bandOffsets);
- return createWritableRaster(sm, location);
- }
-
- /**
- * Creates a new packed raster.
- *
- * @param dataType the data type.
- * @param w the width.
- * @param h the height.
- * @param bandMasks the bit mask for each band.
- * @param location
- *
- * @return The new raster.
- */
- public static WritableRaster createPackedRaster(int dataType, int w, int h,
- int[] bandMasks, Point location)
- {
- SampleModel sm = new SinglePixelPackedSampleModel(dataType, w, h,
- bandMasks);
- return createWritableRaster(sm, location);
- }
-
- /**
- * Creates a new raster.
- *
- * @param dataType the data type.
- * @param w the width.
- * @param h the height.
- * @param bands the number of bands.
- * @param bitsPerBand the number of bits per band.
- * @param location
- *
- * @return The new raster.
- */
- public static WritableRaster createPackedRaster(int dataType,
- int w, int h, int bands, int bitsPerBand, Point location)
- {
- if (bands <= 0 || (bands * bitsPerBand > getTypeBits(dataType)))
- throw new IllegalArgumentException();
-
- SampleModel sm;
-
- if (bands == 1)
- sm = new MultiPixelPackedSampleModel(dataType, w, h, bitsPerBand);
- else
- {
- int[] bandMasks = new int[bands];
- int mask = 0x1;
- for (int bits = bitsPerBand; --bits != 0;)
- mask = (mask << 1) | 0x1;
- for (int i = 0; i < bands; i++)
- {
- bandMasks[i] = mask;
- mask <<= bitsPerBand;
- }
-
- sm = new SinglePixelPackedSampleModel(dataType, w, h, bandMasks);
- }
- return createWritableRaster(sm, location);
- }
-
- /**
- * Creates a new interleaved raster.
- *
- * @param dataBuffer the data buffer.
- * @param w the width.
- * @param h the height.
- * @param scanlineStride the number of data elements from a sample on one
- * row to the corresponding sample on the next row.
- * @param pixelStride the number of elements from a sample in one pixel to
- * the corresponding sample in the next pixel.
- * @param bandOffsets the offset for each band.
- * @param location
- *
- * @return The new raster.
- */
- public static WritableRaster createInterleavedRaster(DataBuffer dataBuffer,
- int w, int h, int scanlineStride, int pixelStride, int[] bandOffsets,
- Point location)
- {
- SampleModel sm = new ComponentSampleModel(dataBuffer.getDataType(),
- w, h, pixelStride, scanlineStride, bandOffsets);
- return createWritableRaster(sm, dataBuffer, location);
- }
-
- /**
- * Creates a new banded raster.
- *
- * @param dataBuffer the data buffer.
- * @param w the width.
- * @param h the height.
- * @param scanlineStride the number of data elements from a sample on one
- * row to the corresponding sample on the next row.
- * @param bankIndices the index for each bank.
- * @param bandOffsets the band offsets.
- * @param location
- *
- * @return The new raster.
- */
- public static WritableRaster createBandedRaster(DataBuffer dataBuffer,
- int w, int h, int scanlineStride, int[] bankIndices, int[] bandOffsets,
- Point location)
- {
- SampleModel sm = new BandedSampleModel(dataBuffer.getDataType(),
- w, h, scanlineStride, bankIndices, bandOffsets);
- return createWritableRaster(sm, dataBuffer, location);
- }
-
- /**
- * Creates a new packed raster.
- *
- * @param dataBuffer the data buffer.
- * @param w the width.
- * @param h the height.
- * @param scanlineStride the number of data elements from a sample on one
- * row to the corresponding sample on the next row.
- * @param bandMasks the bit mask for each band.
- * @param location
- *
- * @return The new raster.
- */
- public static WritableRaster createPackedRaster(DataBuffer dataBuffer,
- int w, int h, int scanlineStride, int[] bandMasks, Point location)
- {
- SampleModel sm = new SinglePixelPackedSampleModel(dataBuffer.getDataType(),
- w, h, scanlineStride, bandMasks);
- return createWritableRaster(sm, dataBuffer, location);
- }
-
- /**
- * Creates a new packed raster.
- *
- * @param dataBuffer the data buffer.
- * @param w the width.
- * @param h the height.
- * @param bitsPerPixel the number of bits per pixel.
- * @param location
- *
- * @return The new raster.
- */
- public static WritableRaster createPackedRaster(DataBuffer dataBuffer,
- int w, int h, int bitsPerPixel, Point location)
- {
- SampleModel sm = new MultiPixelPackedSampleModel(dataBuffer.getDataType(),
- w, h, bitsPerPixel);
- return createWritableRaster(sm, dataBuffer, location);
- }
-
- /**
- * Creates a new raster.
- *
- * @param sm the sample model.
- * @param db the data buffer.
- * @param location
- *
- * @return The new raster.
- */
- public static Raster createRaster(SampleModel sm, DataBuffer db,
- Point location)
- {
- return new Raster(sm, db, location);
- }
-
- /**
- * Creates a new writable raster.
- *
- * @param sm the sample model.
- * @param location
- *
- * @return The new writable raster.
- */
- public static WritableRaster createWritableRaster(SampleModel sm,
- Point location)
- {
- return new WritableRaster(sm, location);
- }
-
- /**
- * Creates a new writable raster.
- *
- * @param sm the sample model.
- * @param db the data buffer.
- * @param location
- *
- * @return The new writable raster.
- */
- public static WritableRaster createWritableRaster(SampleModel sm,
- DataBuffer db, Point location)
- {
- return new WritableRaster(sm, db, location);
- }
-
- /**
- * Returns the raster's parent.
- *
- * @return The raster's parent.
- */
- public Raster getParent()
- {
- return parent;
- }
-
- /**
- * Returns the x-translation.
- *
- * @return The x-translation.
- */
- public final int getSampleModelTranslateX()
- {
- return sampleModelTranslateX;
- }
-
- /**
- * Returns the y-translation.
- *
- * @return The y-translation.
- */
- public final int getSampleModelTranslateY()
- {
- return sampleModelTranslateY;
- }
-
- /**
- * Creates a new writable raster that is compatible with this raster.
- *
- * @return A new writable raster.
- */
- public WritableRaster createCompatibleWritableRaster()
- {
- return new WritableRaster(getSampleModel(), new Point(minX, minY));
- }
-
- /**
- * Creates a new writable raster that is compatible with this raster.
- *
- * @param w the width.
- * @param h the height.
- *
- * @return A new writable raster.
- */
- public WritableRaster createCompatibleWritableRaster(int w, int h)
- {
- return createCompatibleWritableRaster(minX, minY, w, h);
- }
-
- /**
- * Creates a new writable raster that is compatible with this raster, with
- * the specified bounds.
- *
- * @param rect the raster bounds.
- *
- * @return A new writable raster.
- */
- public WritableRaster createCompatibleWritableRaster(Rectangle rect)
- {
- return createCompatibleWritableRaster(rect.x, rect.y,
- rect.width, rect.height);
- }
-
- /**
- * Creates a new writable raster that is compatible with this raster, with
- * the specified bounds.
- *
- * @param x the x-coordinate of the top-left corner of the raster.
- * @param y the y-coordinate of the top-left corner of the raster.
- * @param w the raster width.
- * @param h the raster height.
- *
- * @return A new writable raster.
- */
- public WritableRaster createCompatibleWritableRaster(int x, int y,
- int w, int h)
- {
- SampleModel sm = getSampleModel().createCompatibleSampleModel(w, h);
- return new WritableRaster(sm, sm.createDataBuffer(), new Point(x, y));
- }
-
- public Raster createTranslatedChild(int childMinX, int childMinY) {
- int tcx = sampleModelTranslateX - minX + childMinX;
- int tcy = sampleModelTranslateY - minY + childMinY;
-
- return new Raster(sampleModel, dataBuffer,
- new Rectangle(childMinX, childMinY, width, height),
- new Point(tcx, tcy), this);
- }
-
- public Raster createChild(int parentX, int parentY, int width,
- int height, int childMinX, int childMinY,
- int[] bandList)
- {
- if (parentX < minX || parentX + width > minX + this.width
- || parentY < minY || parentY + height > minY + this.height)
- throw new RasterFormatException("Child raster extends beyond parent");
-
- SampleModel sm = (bandList == null) ?
- sampleModel :
- sampleModel.createSubsetSampleModel(bandList);
-
- /*
- data origin
- /
- +-------------------------
- |\. __ parent trans
- | \`.
- | \ `. parent origin
- | \ `. /
- | /\ +-------- - -
- |trans\ /<\-- deltaTrans
- |child +-+-\---- - -
- | /|`| \__ parent [x, y]
- |child | |`. \
- |origin| : `.\
- | | / `\
- | : / +
- | child [x, y]
-
- parent_xy - parent_trans = child_xy - child_trans
-
- child_trans = parent_trans + child_xy - parent_xy
- */
-
- return new Raster(sm, dataBuffer,
- new Rectangle(childMinX, childMinY, width, height),
- new Point(sampleModelTranslateX + childMinX - parentX,
- sampleModelTranslateY + childMinY - parentY),
- this);
- }
-
- /**
- * Returns a new rectangle containing the bounds of this raster.
- *
- * @return A new rectangle containing the bounds of this raster.
- */
- public Rectangle getBounds()
- {
- return new Rectangle(minX, minY, width, height);
- }
-
- /**
- * Returns the x-coordinate of the top left corner of the raster.
- *
- * @return The x-coordinate of the top left corner of the raster.
- */
- public final int getMinX()
- {
- return minX;
- }
-
- /**
- * Returns the t-coordinate of the top left corner of the raster.
- *
- * @return The t-coordinate of the top left corner of the raster.
- */
- public final int getMinY()
- {
- return minY;
- }
-
- /**
- * Returns the width of the raster.
- *
- * @return The width of the raster.
- */
- public final int getWidth()
- {
- return width;
- }
-
- /**
- * Returns the height of the raster.
- *
- * @return The height of the raster.
- */
- public final int getHeight()
- {
- return height;
- }
-
- /**
- * Returns the number of bands for this raster.
- *
- * @return The number of bands.
- */
- public final int getNumBands()
- {
- return numBands;
- }
-
- public final int getNumDataElements()
- {
- return numDataElements;
- }
-
- /**
- * Returns the transfer type for the raster (this is determined by the
- * raster's sample model).
- *
- * @return The transfer type.
- */
- public final int getTransferType()
- {
- return sampleModel.getTransferType();
- }
-
- /**
- * Returns the data buffer that stores the pixel data for this raster.
- *
- * @return The data buffer.
- */
- public DataBuffer getDataBuffer()
- {
- return dataBuffer;
- }
-
- /**
- * Returns the sample model that accesses the data buffer (to extract pixel
- * data) for this raster.
- *
- * @return The sample model.
- */
- public SampleModel getSampleModel()
- {
- return sampleModel;
- }
-
- public Object getDataElements(int x, int y, Object outData)
- {
- return sampleModel.getDataElements(x - sampleModelTranslateX,
- y - sampleModelTranslateY, outData, dataBuffer);
- }
-
- public Object getDataElements(int x, int y, int w, int h, Object outData)
- {
- return sampleModel.getDataElements(x - sampleModelTranslateX,
- y - sampleModelTranslateY, w, h, outData, dataBuffer);
- }
-
- /**
- * Returns an array containing the samples for the pixel at (x, y) in the
- * raster. If <code>iArray</code> is not <code>null</code>, it will be
- * populated with the sample values and returned as the result of
- * this function (this avoids allocating a new array instance).
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param iArray an array to populate with the sample values and return as
- * the result (if <code>null</code>, a new array will be allocated).
- *
- * @return The pixel sample values.
- */
- public int[] getPixel(int x, int y, int[] iArray)
- {
- return sampleModel.getPixel(x - sampleModelTranslateX,
- y - sampleModelTranslateY, iArray, dataBuffer);
- }
-
- /**
- * Returns an array containing the samples for the pixel at (x, y) in the
- * raster. If <code>fArray</code> is not <code>null</code>, it will be
- * populated with the sample values and returned as the result of
- * this function (this avoids allocating a new array instance).
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param fArray an array to populate with the sample values and return as
- * the result (if <code>null</code>, a new array will be allocated).
- *
- * @return The pixel sample values.
- */
- public float[] getPixel(int x, int y, float[] fArray)
- {
- return sampleModel.getPixel(x - sampleModelTranslateX,
- y - sampleModelTranslateY, fArray, dataBuffer);
- }
-
- /**
- * Returns an array containing the samples for the pixel at (x, y) in the
- * raster. If <code>dArray</code> is not <code>null</code>, it will be
- * populated with the sample values and returned as the result of
- * this function (this avoids allocating a new array instance).
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param dArray an array to populate with the sample values and return as
- * the result (if <code>null</code>, a new array will be allocated).
- *
- * @return The pixel sample values.
- */
- public double[] getPixel(int x, int y, double[] dArray)
- {
- return sampleModel.getPixel(x - sampleModelTranslateX,
- y - sampleModelTranslateY, dArray, dataBuffer);
- }
-
- /**
- * Returns an array containing the samples for the pixels in the region
- * specified by (x, y, w, h) in the raster. The array is ordered by pixels
- * (that is, all the samples for the first pixel are grouped together,
- * followed by all the samples for the second pixel, and so on).
- * If <code>iArray</code> is not <code>null</code>, it will be populated
- * with the sample values and returned as the result of this function (this
- * avoids allocating a new array instance).
- *
- * @param x the x-coordinate of the top-left pixel.
- * @param y the y-coordinate of the top-left pixel.
- * @param w the width of the region of pixels.
- * @param h the height of the region of pixels.
- * @param iArray an array to populate with the sample values and return as
- * the result (if <code>null</code>, a new array will be allocated).
- *
- * @return The pixel sample values.
- */
- public int[] getPixels(int x, int y, int w, int h, int[] iArray)
- {
- return sampleModel.getPixels(x - sampleModelTranslateX,
- y - sampleModelTranslateY, w, h, iArray, dataBuffer);
- }
-
- /**
- * Returns an array containing the samples for the pixels in the region
- * specified by (x, y, w, h) in the raster. The array is ordered by pixels
- * (that is, all the samples for the first pixel are grouped together,
- * followed by all the samples for the second pixel, and so on).
- * If <code>fArray</code> is not <code>null</code>, it will be populated
- * with the sample values and returned as the result of this function (this
- * avoids allocating a new array instance).
- *
- * @param x the x-coordinate of the top-left pixel.
- * @param y the y-coordinate of the top-left pixel.
- * @param w the width of the region of pixels.
- * @param h the height of the region of pixels.
- * @param fArray an array to populate with the sample values and return as
- * the result (if <code>null</code>, a new array will be allocated).
- *
- * @return The pixel sample values.
- */
- public float[] getPixels(int x, int y, int w, int h, float[] fArray)
- {
- return sampleModel.getPixels(x - sampleModelTranslateX,
- y - sampleModelTranslateY, w, h, fArray, dataBuffer);
- }
-
- /**
- * Returns an array containing the samples for the pixels in the region
- * specified by (x, y, w, h) in the raster. The array is ordered by pixels
- * (that is, all the samples for the first pixel are grouped together,
- * followed by all the samples for the second pixel, and so on).
- * If <code>dArray</code> is not <code>null</code>, it will be populated
- * with the sample values and returned as the result of this function (this
- * avoids allocating a new array instance).
- *
- * @param x the x-coordinate of the top-left pixel.
- * @param y the y-coordinate of the top-left pixel.
- * @param w the width of the region of pixels.
- * @param h the height of the region of pixels.
- * @param dArray an array to populate with the sample values and return as
- * the result (if <code>null</code>, a new array will be allocated).
- *
- * @return The pixel sample values.
- */
- public double[] getPixels(int x, int y, int w, int h, double[] dArray)
- {
- return sampleModel.getPixels(x - sampleModelTranslateX,
- y - sampleModelTranslateY, w, h, dArray, dataBuffer);
- }
-
- /**
- * Returns the sample value for the pixel at (x, y) in the raster.
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param b the band (in the range <code>0</code> to
- * <code>getNumBands() - 1</code>).
- *
- * @return The sample value.
- */
- public int getSample(int x, int y, int b)
- {
- return sampleModel.getSample(x - sampleModelTranslateX,
- y - sampleModelTranslateY, b, dataBuffer);
- }
-
- /**
- * Returns the sample value for the pixel at (x, y) in the raster.
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param b the band (in the range <code>0</code> to
- * <code>getNumBands() - 1</code>).
- *
- * @return The sample value.
- *
- * @see #getSample(int, int, int)
- */
- public float getSampleFloat(int x, int y, int b)
- {
- return sampleModel.getSampleFloat(x - sampleModelTranslateX,
- y - sampleModelTranslateY, b, dataBuffer);
- }
-
- /**
- * Returns the sample value for the pixel at (x, y) in the raster.
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param b the band (in the range <code>0</code> to
- * <code>getNumBands() - 1</code>).
- *
- * @return The sample value.
- *
- * @see #getSample(int, int, int)
- */
- public double getSampleDouble(int x, int y, int b)
- {
- return sampleModel.getSampleDouble(x - sampleModelTranslateX,
- y - sampleModelTranslateY, b, dataBuffer);
- }
-
- /**
- * Returns an array containing the samples from one band for the pixels in
- * the region specified by (x, y, w, h) in the raster. If
- * <code>iArray</code> is not <code>null</code>, it will be
- * populated with the sample values and returned as the result of this
- * function (this avoids allocating a new array instance).
- *
- * @param x the x-coordinate of the top-left pixel.
- * @param y the y-coordinate of the top-left pixel.
- * @param w the width of the region of pixels.
- * @param h the height of the region of pixels.
- * @param b the band (in the range <code>0</code> to
- * </code>getNumBands() - 1</code>).
- * @param iArray an array to populate with the sample values and return as
- * the result (if <code>null</code>, a new array will be allocated).
- *
- * @return The sample values.
- */
- public int[] getSamples(int x, int y, int w, int h, int b,
- int[] iArray)
- {
- return sampleModel.getSamples(x - sampleModelTranslateX,
- y - sampleModelTranslateY, w, h, b, iArray, dataBuffer);
- }
-
- /**
- * Returns an array containing the samples from one band for the pixels in
- * the region specified by (x, y, w, h) in the raster. If
- * <code>fArray</code> is not <code>null</code>, it will be
- * populated with the sample values and returned as the result of this
- * function (this avoids allocating a new array instance).
- *
- * @param x the x-coordinate of the top-left pixel.
- * @param y the y-coordinate of the top-left pixel.
- * @param w the width of the region of pixels.
- * @param h the height of the region of pixels.
- * @param b the band (in the range <code>0</code> to
- * </code>getNumBands() - 1</code>).
- * @param fArray an array to populate with the sample values and return as
- * the result (if <code>null</code>, a new array will be allocated).
- *
- * @return The sample values.
- */
- public float[] getSamples(int x, int y, int w, int h, int b, float[] fArray)
- {
- return sampleModel.getSamples(x - sampleModelTranslateX,
- y - sampleModelTranslateY, w, h, b, fArray, dataBuffer);
- }
-
- /**
- * Returns an array containing the samples from one band for the pixels in
- * the region specified by (x, y, w, h) in the raster. If
- * <code>dArray</code> is not <code>null</code>, it will be
- * populated with the sample values and returned as the result of this
- * function (this avoids allocating a new array instance).
- *
- * @param x the x-coordinate of the top-left pixel.
- * @param y the y-coordinate of the top-left pixel.
- * @param w the width of the region of pixels.
- * @param h the height of the region of pixels.
- * @param b the band (in the range <code>0</code> to
- * </code>getNumBands() - 1</code>).
- * @param dArray an array to populate with the sample values and return as
- * the result (if <code>null</code>, a new array will be allocated).
- *
- * @return The sample values.
- */
- public double[] getSamples(int x, int y, int w, int h, int b,
- double[] dArray)
- {
- return sampleModel.getSamples(x - sampleModelTranslateX,
- y - sampleModelTranslateY, w, h, b, dArray, dataBuffer);
- }
-
- /**
- * Create a String representing the state of this Raster.
- *
- * @return A String representing the stat of this Raster.
- */
- public String toString()
- {
- CPStringBuilder result = new CPStringBuilder();
-
- result.append(getClass().getName());
- result.append("[(");
- result.append(minX).append(",").append(minY).append("), ");
- result.append(width).append(" x ").append(height).append(",");
- result.append(sampleModel).append(",");
- result.append(dataBuffer);
- result.append("]");
-
- return result.toString();
- }
-
- /**
- * Returns the number of bits used to represent the specified data type.
- * Valid types are:
- * <ul>
- * <li>{@link DataBuffer#TYPE_BYTE};</li>
- * <li>{@link DataBuffer#TYPE_USHORT};</li>
- * <li>{@link DataBuffer#TYPE_SHORT};</li>
- * <li>{@link DataBuffer#TYPE_INT};</li>
- * <li>{@link DataBuffer#TYPE_FLOAT};</li>
- * <li>{@link DataBuffer#TYPE_DOUBLE};</li>
- * </ul>
- * This method returns 0 for invalid data types.
- *
- * @param dataType the data type.
- *
- * @return The number of bits used to represent the specified data type.
- */
- private static int getTypeBits(int dataType)
- {
- switch (dataType)
- {
- case DataBuffer.TYPE_BYTE:
- return 8;
- case DataBuffer.TYPE_USHORT:
- case DataBuffer.TYPE_SHORT:
- return 16;
- case DataBuffer.TYPE_INT:
- case DataBuffer.TYPE_FLOAT:
- return 32;
- case DataBuffer.TYPE_DOUBLE:
- return 64;
- default:
- return 0;
- }
- }
-}
diff --git a/libjava/classpath/java/awt/image/RasterFormatException.java b/libjava/classpath/java/awt/image/RasterFormatException.java
deleted file mode 100644
index 582c2ae..0000000
--- a/libjava/classpath/java/awt/image/RasterFormatException.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/* RasterFormatException.java -- indicates invalid layout in Raster
- Copyright (C) 2002, 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-/**
- * This exception is thrown when there is invalid layout information in
- * <code>Raster</code>
- *
- * @author Eric Blake (ebb9@email.byu.edu)
- * @see Raster
- * @status updated to 1.4
- */
-public class RasterFormatException extends RuntimeException
-{
- /**
- * Compatible with JDK 1.0+.
- */
- private static final long serialVersionUID = 96598996116164315L;
-
- /**
- * Create a new instance with a descriptive error message.
- *
- * @param message the descriptive error message
- */
- public RasterFormatException(String message)
- {
- super(message);
- }
-} // class RasterFormatException
diff --git a/libjava/classpath/java/awt/image/RasterOp.java b/libjava/classpath/java/awt/image/RasterOp.java
deleted file mode 100644
index 2b2c073..0000000
--- a/libjava/classpath/java/awt/image/RasterOp.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/* RasterOp.java --
- Copyright (C) 2000, 2002, 2004, 2005, 2006, Free Software Foundation
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-import java.awt.RenderingHints;
-import java.awt.geom.Point2D;
-import java.awt.geom.Rectangle2D;
-
-/**
- * An operation that is performed on one raster (the source) producing a new
- * raster (the destination).
- */
-public interface RasterOp
-{
- /**
- * Performs an operation on the source raster, returning the result in a
- * writable raster. If <code>dest</code> is <code>null</code>, a new
- * <code>WritableRaster</code> will be created by calling the
- * {@link #createCompatibleDestRaster(Raster)} method. If <code>dest</code>
- * is not <code>null</code>, the result is written to <code>dest</code> then
- * returned (this avoids creating a new <code>WritableRaster</code> each
- * time this method is called).
- *
- * @param src the source raster.
- * @param dest the destination raster (<code>null</code> permitted).
- *
- * @return The filtered raster.
- */
- WritableRaster filter(Raster src, WritableRaster dest);
-
- /**
- * Returns the bounds of the destination raster on the basis of this
- * <code>RasterOp</code> being applied to the specified source raster.
- *
- * @param src the source raster.
- *
- * @return The destination bounds.
- */
- Rectangle2D getBounds2D(Raster src);
-
- /**
- * Returns a raster that can be used by this <code>RasterOp</code> as the
- * destination raster when operating on the specified source raster.
- *
- * @param src the source raster.
- *
- * @return A new writable raster that can be used as the destination raster.
- */
- WritableRaster createCompatibleDestRaster(Raster src);
-
- /**
- * Returns the point on the destination raster that corresponds to the given
- * point on the source raster.
- *
- * @param srcPoint the source point.
- * @param destPoint the destination point (<code>null</code> permitted).
- *
- * @return The destination point.
- */
- Point2D getPoint2D(Point2D srcPoint, Point2D destPoint);
-
- /**
- * Returns the rendering hints for this operation.
- *
- * @return The rendering hints.
- */
- RenderingHints getRenderingHints();
-}
diff --git a/libjava/classpath/java/awt/image/RenderedImage.java b/libjava/classpath/java/awt/image/RenderedImage.java
deleted file mode 100644
index fd18871..0000000
--- a/libjava/classpath/java/awt/image/RenderedImage.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/* RenderedImage.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-import java.awt.Rectangle;
-import java.util.Vector;
-
-/**
- * NEEDS DOCUMENTATION
- */
-public interface RenderedImage
-{
- Vector<RenderedImage> getSources();
- Object getProperty(String name);
- String[] getPropertyNames();
- ColorModel getColorModel();
- SampleModel getSampleModel();
- int getWidth();
- int getHeight();
- int getMinX();
- int getMinY();
- int getNumXTiles();
- int getNumYTiles();
- int getMinTileX();
- int getMinTileY();
- int getTileWidth();
- int getTileHeight();
- int getTileGridXOffset();
- int getTileGridYOffset();
- Raster getTile(int x, int y);
- Raster getData();
- Raster getData(Rectangle r);
- WritableRaster copyData(WritableRaster raster);
-} // interface RenderedImage
diff --git a/libjava/classpath/java/awt/image/ReplicateScaleFilter.java b/libjava/classpath/java/awt/image/ReplicateScaleFilter.java
deleted file mode 100644
index 94aad85..0000000
--- a/libjava/classpath/java/awt/image/ReplicateScaleFilter.java
+++ /dev/null
@@ -1,257 +0,0 @@
-/* ReplicateScaleFilter.java -- Java class for filtering images
- Copyright (C) 1999 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-import java.util.Hashtable;
-
-/**
- * This filter should be used for fast scaling of images where the result
- * does not need to ensure straight lines are still straight, etc. The
- * exact method is not defined by Sun but some sort of fast Box filter should
- * probably be correct.
- * <br>
- * Currently this filter does nothing and needs to be implemented.
- *
- * @author C. Brian Jones (cbj@gnu.org)
- */
-public class ReplicateScaleFilter extends ImageFilter
-{
- public ReplicateScaleFilter(int width, int height) {
- destHeight = height;
- destWidth = width;
- }
-
- /**
- * The height of the destination image.
- */
- protected int destHeight;
-
- /**
- * The width of the destination image.
- */
- protected int destWidth;
-
- /**
- * The height of the source image.
- */
- protected int srcHeight;
-
- /**
- * The width of the source image.
- */
- protected int srcWidth;
-
- /**
- *
- */
- protected int srcrows[];
-
- /**
- *
- */
- protected int srccols[];
-
- /**
- *
- */
- protected Object outpixbuf;
-
- /**
- * An <code>ImageProducer</code> indicates the size of the image
- * being produced using this method. A filter can override this
- * method to intercept these calls from the producer in order to
- * change either the width or the height before in turn calling
- * the consumer's <code>setDimensions</code> method.
- *
- * @param width the width of the image
- * @param height the height of the image
- */
- public void setDimensions(int width, int height)
- {
- srcWidth = width;
- srcHeight = height;
-
- /* If either destHeight or destWidth is < 0, the image should
- maintain its original aspect ratio. When both are < 0,
- just maintain the original width and height. */
- if (destWidth < 0 && destHeight < 0)
- {
- destWidth = width;
- destHeight = height;
- }
- else if (destWidth < 0)
- {
- destWidth = width * destHeight / srcHeight;
- }
- else if (destHeight < 0)
- {
- destHeight = height * destWidth / srcWidth;
- }
-
- if (consumer != null)
- consumer.setDimensions(destWidth, destHeight);
- }
-
- /**
- * An <code>ImageProducer</code> can set a list of properties
- * associated with this image by using this method.
- *
- * @param props the list of properties associated with this image
- */
- public void setProperties(Hashtable<?, ?> props)
- {
- Hashtable<Object, Object> prop2 = (Hashtable<Object, Object>) props;
- prop2.put("filters", "ReplicateScaleFilter");
- if (consumer != null)
- consumer.setProperties(prop2);
- }
-
- /**
- * This function delivers a rectangle of pixels where any
- * pixel(m,n) is stored in the array as a <code>byte</code> at
- * index (n * scansize + m + offset).
- *
- * @param x the x coordinate of the rectangle
- * @param y the y coordinate of the rectangle
- * @param w the width of the rectangle
- * @param h the height of the rectangle
- * @param model the <code>ColorModel</code> used to translate the pixels
- * @param pixels the array of pixel values
- * @param offset the index of the first pixels in the <code>pixels</code> array
- * @param scansize the width to use in extracting pixels from the <code>pixels</code> array
- */
- public void setPixels(int x, int y, int w, int h,
- ColorModel model, byte[] pixels, int offset, int scansize)
- {
- if (srcrows == null || srccols == null)
- setupSources();
- int dx1 = (2 * x * destWidth + srcWidth - 1) / (2 * destWidth);
- int dy1 = (2 * y * destHeight + srcHeight - 1) / (2 * destHeight);
- byte[] pix;
- if (outpixbuf != null && outpixbuf instanceof byte[])
- {
- pix = (byte[]) outpixbuf;
- }
- else
- {
- pix = new byte[destWidth];
- outpixbuf = pix;
- }
- int sy, sx;
- for (int yy = dy1; (sy = srcrows[yy]) < y + h; yy++)
- {
- int offs = offset + scansize * (sy - y);
- int xx;
- for (xx = dx1; (sx = srccols[xx]) < x + w; xx++)
- {
- pix[xx] = pixels[offs + sx - x];
- }
- if (xx > dx1)
- {
- consumer.setPixels(dx1, yy, xx - dx1, 1, model, pix, dx1,
- destWidth);
- }
- }
- }
-
- /**
- * This function delivers a rectangle of pixels where any
- * pixel(m,n) is stored in the array as an <code>int</code> at
- * index (n * scansize + m + offset).
- *
- * @param x the x coordinate of the rectangle
- * @param y the y coordinate of the rectangle
- * @param w the width of the rectangle
- * @param h the height of the rectangle
- * @param model the <code>ColorModel</code> used to translate the pixels
- * @param pixels the array of pixel values
- * @param offset the index of the first pixels in the <code>pixels</code> array
- * @param scansize the width to use in extracting pixels from the <code>pixels</code> array
- */
- public void setPixels(int x, int y, int w, int h,
- ColorModel model, int[] pixels, int offset, int scansize)
- {
- if (srcrows == null || srccols == null)
- setupSources();
- int dx1 = (2 * x * destWidth + srcWidth - 1) / (2 * destWidth);
- int dy1 = (2 * y * destHeight + srcHeight - 1) / (2 * destHeight);
- int[] pix;
- if (outpixbuf != null && outpixbuf instanceof int[])
- {
- pix = (int[]) outpixbuf;
- }
- else
- {
- pix = new int[destWidth];
- outpixbuf = pix;
- }
- int sy, sx;
- for (int yy = dy1; (sy = srcrows[yy]) < y + h; yy++)
- {
- int offs = offset + scansize * (sy - y);
- int xx;
- for (xx = dx1; (sx = srccols[xx]) < x + w; xx++)
- {
- pix[xx] = pixels[offs + sx - x];
- }
- if (xx > dx1)
- {
- consumer.setPixels(dx1, yy, xx - dx1, 1, model, pix, dx1,
- destWidth);
- }
- }
- }
-
- /**
- * Sets up the srcrows and srccols arrays.
- */
- private void setupSources()
- {
- srcrows = new int[destHeight + 1];
- for (int y = 0; y <= destHeight; y++)
- {
- srcrows[y] = (2 * y * srcHeight + srcHeight) / (2 * destHeight);
- }
- srccols = new int[destWidth + 1];
- for (int x = 0; x <= destWidth; x++)
- {
- srccols[x] = (2 * x * srcWidth + srcWidth) / (2 * destWidth);
- }
- }
-}
diff --git a/libjava/classpath/java/awt/image/RescaleOp.java b/libjava/classpath/java/awt/image/RescaleOp.java
deleted file mode 100644
index efab40b..0000000
--- a/libjava/classpath/java/awt/image/RescaleOp.java
+++ /dev/null
@@ -1,385 +0,0 @@
-/* Copyright (C) 2004, 2006 Free Software Foundation
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-import java.awt.RenderingHints;
-import java.awt.geom.Point2D;
-import java.awt.geom.Rectangle2D;
-import java.util.Arrays;
-
-/**
- * RescaleOp is a filter that changes each pixel by a scaling factor and offset.
- *
- * For filtering Rasters, either one scaling factor and offset can be specified,
- * which will be applied to all bands; or a scaling factor and offset can be
- * specified for each band.
- *
- * For BufferedImages, the scaling may apply to both color and alpha components.
- * If only one scaling factor is provided, or if the number of factors provided
- * equals the number of color components, the scaling is performed on all color
- * components. Otherwise, the scaling is performed on all components including
- * alpha. Alpha premultiplication is ignored.
- *
- * After filtering, if color conversion is necessary, the conversion happens,
- * taking alpha premultiplication into account.
- *
- * @author Jerry Quinn (jlquinn@optonline.net)
- * @author Francis Kung (fkung@redhat.com)
- */
-public class RescaleOp implements BufferedImageOp, RasterOp
-{
- private float[] scale;
- private float[] offsets;
- private RenderingHints hints = null;
-
- /**
- * Create a new RescaleOp object using the given scale factors and offsets.
- *
- * The length of the arrays must be equal to the number of bands (or number of
- * data or color components) of the raster/image that this Op will be used on,
- * otherwise an IllegalArgumentException will be thrown when calling the
- * filter method.
- *
- * @param scaleFactors an array of scale factors.
- * @param offsets an array of offsets.
- * @param hints any rendering hints to use (can be null).
- * @throws NullPointerException if the scaleFactors or offsets array is null.
- */
- public RescaleOp(float[] scaleFactors,
- float[] offsets,
- RenderingHints hints)
- {
- int length = Math.min(scaleFactors.length, offsets.length);
-
- scale = new float[length];
- System.arraycopy(scaleFactors, 0, this.scale, 0, length);
-
- this.offsets = new float[length];
- System.arraycopy(offsets, 0, this.offsets, 0, length);
-
- this.hints = hints;
- }
-
- /**
- * Create a new RescaleOp object using the given scale factor and offset.
- *
- * The same scale factor and offset will be used on all bands/components.
- *
- * @param scaleFactor the scale factor to use.
- * @param offset the offset to use.
- * @param hints any rendering hints to use (can be null).
- */
- public RescaleOp(float scaleFactor,
- float offset,
- RenderingHints hints)
- {
- scale = new float[]{ scaleFactor };
- offsets = new float[]{offset};
- this.hints = hints;
- }
-
- /**
- * Returns the scaling factors. This method accepts an optional array, which
- * will be used to store the factors if not null (this avoids allocating a
- * new array). If this array is too small to hold all the scaling factors,
- * the array will be filled and the remaining factors discarded.
- *
- * @param scaleFactors array to store the scaling factors in (can be null).
- * @return an array of scaling factors.
- */
- public final float[] getScaleFactors(float[] scaleFactors)
- {
- if (scaleFactors == null)
- scaleFactors = new float[scale.length];
- System.arraycopy(scale, 0, scaleFactors, 0, Math.min(scale.length,
- scaleFactors.length));
- return scaleFactors;
- }
-
- /**
- * Returns the offsets. This method accepts an optional array, which
- * will be used to store the offsets if not null (this avoids allocating a
- * new array). If this array is too small to hold all the offsets, the array
- * will be filled and the remaining factors discarded.
- *
- * @param offsets array to store the offsets in (can be null).
- * @return an array of offsets.
- */
- public final float[] getOffsets(float[] offsets)
- {
- if (offsets == null)
- offsets = new float[this.offsets.length];
- System.arraycopy(this.offsets, 0, offsets, 0, Math.min(this.offsets.length,
- offsets.length));
- return offsets;
- }
-
- /**
- * Returns the number of scaling factors / offsets.
- *
- * @return the number of scaling factors / offsets.
- */
- public final int getNumFactors()
- {
- return scale.length;
- }
-
- /* (non-Javadoc)
- * @see java.awt.image.BufferedImageOp#getRenderingHints()
- */
- public final RenderingHints getRenderingHints()
- {
- return hints;
- }
-
- /**
- * Converts the source image using the scale factors and offsets specified in
- * the constructor. The resulting image is stored in the destination image if
- * one is provided; otherwise a new BufferedImage is created and returned.
- *
- * The source image cannot use an IndexColorModel, and the destination image
- * (if one is provided) must have the same size.
- *
- * If the final value of a sample is beyond the range of the color model, it
- * will be clipped to the appropriate maximum / minimum.
- *
- * @param src The source image.
- * @param dst The destination image.
- * @throws IllegalArgumentException if the rasters and/or color spaces are
- * incompatible.
- * @return The rescaled image.
- */
- public final BufferedImage filter(BufferedImage src, BufferedImage dst)
- {
- // Initial checks
- if (scale.length != 1
- && scale.length != src.getColorModel().getNumComponents()
- && (scale.length != src.getColorModel().getNumColorComponents()))
- throw new IllegalArgumentException("Source image has wrong number of "
- + "bands for these scaling factors.");
-
- if (dst == null)
- dst = createCompatibleDestImage(src, null);
- else if (src.getHeight() != dst.getHeight()
- || src.getWidth() != dst.getWidth())
- throw new IllegalArgumentException("Source and destination images are "
- + "different sizes.");
-
- // Prepare for possible colorspace conversion
- BufferedImage dst2 = dst;
- if (dst.getColorModel().getColorSpace().getType() != src.getColorModel().getColorSpace().getType())
- dst2 = createCompatibleDestImage(src, src.getColorModel());
-
- // Figure out how many bands to scale
- int numBands = scale.length;
- if (scale.length == 1)
- numBands = src.getColorModel().getNumColorComponents();
- boolean[] bands = new boolean[numBands];
- // this assumes the alpha, if present, is the last band
- Arrays.fill(bands, true);
-
- // Perform rescaling
- filter(src.getRaster(), dst2.getRaster(), bands);
-
- // Copy alpha band if needed (ie if it exists and wasn't scaled)
- // NOTE: This assumes the alpha component is the last band!
- if (src.getColorModel().hasAlpha()
- && numBands == src.getColorModel().getNumColorComponents())
- {
-
- dst2.getRaster().setSamples(0, 0, src.getWidth(), src.getHeight(),
- numBands,
- src.getRaster().getSamples(0, 0,
- src.getWidth(),
- src.getHeight(),
- numBands,
- (int[]) null));
- }
-
- // Perform colorspace conversion if needed
- if (dst != dst2)
- new ColorConvertOp(hints).filter(dst2, dst);
-
- return dst;
- }
-
- /* (non-Javadoc)
- * @see java.awt.image.RasterOp#filter(java.awt.image.Raster, java.awt.image.WritableRaster)
- */
- public final WritableRaster filter(Raster src, WritableRaster dest)
- {
- // Required sanity checks
- if (scale.length != 1 && scale.length != src.numBands)
- throw new IllegalArgumentException("Number of rasters is incompatible "
- + "with the number of scaling "
- + "factors provided.");
-
- if (dest == null)
- dest = src.createCompatibleWritableRaster();
- else if (src.getHeight() != dest.getHeight()
- || src.getWidth() != dest.getWidth())
- throw new IllegalArgumentException("Source and destination rasters are "
- + "different sizes.");
- else if (src.numBands != dest.numBands)
- throw new IllegalArgumentException("Source and destination rasters "
- + "are incompatible.");
-
- // Filter all bands
- boolean[] bands = new boolean[src.getNumBands()];
- Arrays.fill(bands, true);
- return filter(src, dest, bands);
- }
-
- /**
- * Perform raster-based filtering on a selected number of bands.
- *
- * The length of the bands array should equal the number of bands; a true
- * element indicates filtering should happen on the corresponding band, while
- * a false element will skip the band.
- *
- * The rasters are assumed to be compatible and non-null.
- *
- * @param src the source raster.
- * @param dest the destination raster.
- * @param bands an array indicating which bands to filter.
- * @throws NullPointerException if any parameter is null.
- * @throws ArrayIndexOutOfBoundsException if the bands array is too small.
- * @return the destination raster.
- */
- private WritableRaster filter(Raster src, WritableRaster dest, boolean[] bands)
- {
- int[] values = new int[src.getHeight() * src.getWidth()];
- float scaleFactor, offset;
-
- // Find max sample value, to be used for clipping later
- int[] maxValue = src.getSampleModel().getSampleSize();
- for (int i = 0; i < maxValue.length; i++)
- maxValue[i] = (int)Math.pow(2, maxValue[i]) - 1;
-
- // TODO: can this be optimized further?
- // Filter all samples of all requested bands
- for (int band = 0; band < bands.length; band++)
- if (bands[band])
- {
- values = src.getSamples(src.getMinX(), src.getMinY(), src.getWidth(),
- src.getHeight(), band, values);
-
- if (scale.length == 1)
- {
- scaleFactor = scale[0];
- offset = offsets[0];
- }
- else
- {
- scaleFactor = scale[band];
- offset = offsets[band];
- }
-
- for (int i = 0; i < values.length; i++)
- {
- values[i] = (int) (values[i] * scaleFactor + offset);
-
- // Clip if needed
- if (values[i] < 0)
- values[i] = 0;
- if (values[i] > maxValue[band])
- values[i] = maxValue[band];
- }
-
- dest.setSamples(dest.getMinX(), dest.getMinY(), dest.getWidth(),
- dest.getHeight(), band, values);
- }
-
- return dest;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see java.awt.image.BufferedImageOp#createCompatibleDestImage(java.awt.image.BufferedImage,
- * java.awt.image.ColorModel)
- */
- public BufferedImage createCompatibleDestImage(BufferedImage src,
- ColorModel dstCM)
- {
- if (dstCM == null)
- return new BufferedImage(src.getWidth(), src.getHeight(), src.getType());
-
- return new BufferedImage(dstCM,
- src.getRaster().createCompatibleWritableRaster(),
- src.isAlphaPremultiplied(), null);
- }
-
- /* (non-Javadoc)
- * @see java.awt.image.RasterOp#createCompatibleDestRaster(java.awt.image.Raster)
- */
- public WritableRaster createCompatibleDestRaster(Raster src)
- {
- return src.createCompatibleWritableRaster();
- }
-
- /* (non-Javadoc)
- * @see java.awt.image.BufferedImageOp#getBounds2D(java.awt.image.BufferedImage)
- */
- public final Rectangle2D getBounds2D(BufferedImage src)
- {
- return src.getRaster().getBounds();
- }
-
- /* (non-Javadoc)
- * @see java.awt.image.RasterOp#getBounds2D(java.awt.image.Raster)
- */
- public final Rectangle2D getBounds2D(Raster src)
- {
- return src.getBounds();
- }
-
- /* (non-Javadoc)
- * @see java.awt.image.BufferedImageOp#getPoint2D(java.awt.geom.Point2D, java.awt.geom.Point2D)
- */
- public final Point2D getPoint2D(Point2D src, Point2D dst)
- {
- if (dst == null)
- dst = (Point2D) src.clone();
- else
- dst.setLocation(src);
-
- return dst;
- }
-
-}
diff --git a/libjava/classpath/java/awt/image/SampleModel.java b/libjava/classpath/java/awt/image/SampleModel.java
deleted file mode 100644
index 7e0b18c..0000000
--- a/libjava/classpath/java/awt/image/SampleModel.java
+++ /dev/null
@@ -1,974 +0,0 @@
-/* Copyright (C) 2000, 2001, 2002, 2005, 2006, Free Software Foundation
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package java.awt.image;
-
-/**
- * A <code>SampleModel</code> is used to access pixel data from a
- * {@link DataBuffer}. This is used by the {@link Raster} class.
- *
- * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
- */
-public abstract class SampleModel
-{
- /** Width of image described. */
- protected int width;
-
- /** Height of image described. */
- protected int height;
-
- /** Number of bands in the image described. Package-private here,
- shadowed by ComponentSampleModel. */
- protected int numBands;
-
- /**
- * The DataBuffer type that is used to store the data of the image
- * described.
- */
- protected int dataType;
-
- /**
- * Creates a new sample model with the specified attributes.
- *
- * @param dataType the data type (one of {@link DataBuffer#TYPE_BYTE},
- * {@link DataBuffer#TYPE_USHORT}, {@link DataBuffer#TYPE_SHORT},
- * {@link DataBuffer#TYPE_INT}, {@link DataBuffer#TYPE_FLOAT},
- * {@link DataBuffer#TYPE_DOUBLE} or {@link DataBuffer#TYPE_UNDEFINED}).
- * @param w the width in pixels (must be greater than zero).
- * @param h the height in pixels (must be greater than zero).
- * @param numBands the number of bands (must be greater than zero).
- *
- * @throws IllegalArgumentException if <code>dataType</code> is not one of
- * the listed values.
- * @throws IllegalArgumentException if <code>w</code> is less than or equal
- * to zero.
- * @throws IllegalArgumentException if <code>h</code> is less than or equal
- * to zero.
- * @throws IllegalArgumentException if <code>w * h</code> is greater than
- * {@link Integer#MAX_VALUE}.
- */
- public SampleModel(int dataType, int w, int h, int numBands)
- {
- if (dataType != DataBuffer.TYPE_UNDEFINED)
- if (dataType < DataBuffer.TYPE_BYTE || dataType > DataBuffer.TYPE_DOUBLE)
- throw new IllegalArgumentException("Unrecognised 'dataType' argument.");
-
- if ((w <= 0) || (h <= 0))
- throw new IllegalArgumentException((w <= 0 ? " width<=0" : " width is ok")
- + (h <= 0 ? " height<=0" : " height is ok"));
-
- long area = (long) w * (long) h;
- if (area > Integer.MAX_VALUE)
- throw new IllegalArgumentException("w * h exceeds Integer.MAX_VALUE.");
-
- if (numBands <= 0)
- throw new IllegalArgumentException("Requires numBands > 0.");
-
- this.dataType = dataType;
- this.width = w;
- this.height = h;
- this.numBands = numBands;
- }
-
- /**
- * Returns the width of the pixel data accessible via this
- * <code>SampleModel</code>.
- *
- * @return The width.
- *
- * @see #getHeight()
- */
- public final int getWidth()
- {
- return width;
- }
-
- /**
- * Returns the height of the pixel data accessible via this
- * <code>SampleModel</code>.
- *
- * @return The height.
- *
- * @see #getWidth()
- */
- public final int getHeight()
- {
- return height;
- }
-
- /**
- * Returns the number of bands for this <code>SampleModel</code>.
- *
- * @return The number of bands.
- */
- public final int getNumBands()
- {
- return numBands;
- }
-
- public abstract int getNumDataElements();
-
- /**
- * Returns the type of the {@link DataBuffer} that this
- * <code>SampleModel</code> accesses.
- *
- * @return The data buffer type.
- */
- public final int getDataType()
- {
- return dataType;
- }
-
- public int getTransferType()
- {
- // FIXME: Is this a reasonable default implementation?
- return dataType;
- }
-
- /**
- * Returns an array containing the samples for the pixel at (x, y) in the
- * specified data buffer. If <code>iArray</code> is not <code>null</code>,
- * it will be populated with the sample values and returned as the result of
- * this function (this avoids allocating a new array instance).
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param iArray an array to populate with the sample values and return as
- * the result (if <code>null</code>, a new array will be allocated).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @return The pixel sample values.
- *
- * @throws NullPointerException if <code>data</code> is <code>null</code>.
- */
- public int[] getPixel(int x, int y, int[] iArray, DataBuffer data)
- {
- if (iArray == null)
- iArray = new int[numBands];
- for (int b = 0; b < numBands; b++)
- iArray[b] = getSample(x, y, b, data);
- return iArray;
- }
-
- /**
- *
- * This method is provided as a faster alternative to getPixel(),
- * that can be used when there is no need to decode the pixel into
- * separate sample values.
- *
- * @param obj An array to return the pixel data in. If null, an
- * array of the right type and size will be created.
- *
- * @return A single pixel as an array object of a primitive type,
- * based on the transfer type. Eg. if transfer type is
- * DataBuffer.TYPE_USHORT, then a short[] object is returned.
- */
- public abstract Object getDataElements(int x, int y, Object obj,
- DataBuffer data);
-
-
- public Object getDataElements(int x, int y, int w, int h, Object obj,
- DataBuffer data)
- {
- int size = w * h;
- int numDataElements = getNumDataElements();
- int dataSize = numDataElements * size;
-
- if (obj == null)
- {
- switch (getTransferType())
- {
- case DataBuffer.TYPE_BYTE:
- obj = new byte[dataSize];
- break;
- case DataBuffer.TYPE_USHORT:
- obj = new short[dataSize];
- break;
- case DataBuffer.TYPE_INT:
- obj = new int[dataSize];
- break;
- default:
- // Seems like the only sensible thing to do.
- throw new ClassCastException();
- }
- }
- Object pixelData = null;
- int outOffset = 0;
- for (int yy = y; yy < (y + h); yy++)
- {
- for (int xx = x; xx < (x + w); xx++)
- {
- pixelData = getDataElements(xx, yy, pixelData, data);
- System.arraycopy(pixelData, 0, obj, outOffset,
- numDataElements);
- outOffset += numDataElements;
- }
- }
- return obj;
- }
-
- public abstract void setDataElements(int x, int y, Object obj,
- DataBuffer data);
-
- public void setDataElements(int x, int y, int w, int h,
- Object obj, DataBuffer data)
- {
- int numDataElements = getNumDataElements();
-
- Object pixelData;
- switch (getTransferType())
- {
- case DataBuffer.TYPE_BYTE:
- pixelData = new byte[numDataElements];
- break;
- case DataBuffer.TYPE_USHORT:
- case DataBuffer.TYPE_SHORT:
- pixelData = new short[numDataElements];
- break;
- case DataBuffer.TYPE_INT:
- pixelData = new int[numDataElements];
- break;
- case DataBuffer.TYPE_FLOAT:
- pixelData = new float[numDataElements];
- break;
- case DataBuffer.TYPE_DOUBLE:
- pixelData = new double[numDataElements];
- break;
- default:
- // The RI silently igores invalid types.
- pixelData = null;
- }
-
- int inOffset = 0;
- if (pixelData != null)
- {
- for (int yy=y; yy<(y+h); yy++)
- {
- for (int xx=x; xx<(x+w); xx++)
- {
- System.arraycopy(obj, inOffset, pixelData, 0, numDataElements);
- setDataElements(xx, yy, pixelData, data);
- inOffset += numDataElements;
- }
- }
- }
- }
-
- /**
- * Returns an array containing the samples for the pixel at (x, y) in the
- * specified data buffer. If <code>fArray</code> is not <code>null</code>,
- * it will be populated with the sample values and returned as the result of
- * this function (this avoids allocating a new array instance).
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param fArray an array to populate with the sample values and return as
- * the result (if <code>null</code>, a new array will be allocated).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @return The pixel sample values.
- *
- * @throws NullPointerException if <code>data</code> is <code>null</code>.
- */
- public float[] getPixel(int x, int y, float[] fArray, DataBuffer data)
- {
- if (fArray == null)
- fArray = new float[numBands];
-
- for (int b = 0; b < numBands; b++)
- {
- fArray[b] = getSampleFloat(x, y, b, data);
- }
- return fArray;
- }
-
- /**
- * Returns an array containing the samples for the pixel at (x, y) in the
- * specified data buffer. If <code>dArray</code> is not <code>null</code>,
- * it will be populated with the sample values and returned as the result of
- * this function (this avoids allocating a new array instance).
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param dArray an array to populate with the sample values and return as
- * the result (if <code>null</code>, a new array will be allocated).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @return The pixel sample values.
- *
- * @throws NullPointerException if <code>data</code> is <code>null</code>.
- */
- public double[] getPixel(int x, int y, double[] dArray, DataBuffer data) {
- if (dArray == null)
- dArray = new double[numBands];
- for (int b = 0; b < numBands; b++)
- {
- dArray[b] = getSampleDouble(x, y, b, data);
- }
- return dArray;
- }
-
- /**
- * Returns an array containing the samples for the pixels in the region
- * specified by (x, y, w, h) in the specified data buffer. The array is
- * ordered by pixels (that is, all the samples for the first pixel are
- * grouped together, followed by all the samples for the second pixel, and so
- * on). If <code>iArray</code> is not <code>null</code>, it will be
- * populated with the sample values and returned as the result of this
- * function (this avoids allocating a new array instance).
- *
- * @param x the x-coordinate of the top-left pixel.
- * @param y the y-coordinate of the top-left pixel.
- * @param w the width of the region of pixels.
- * @param h the height of the region of pixels.
- * @param iArray an array to populate with the sample values and return as
- * the result (if <code>null</code>, a new array will be allocated).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @return The pixel sample values.
- *
- * @throws NullPointerException if <code>data</code> is <code>null</code>.
- */
- public int[] getPixels(int x, int y, int w, int h, int[] iArray,
- DataBuffer data)
- {
- int size = w * h;
- int outOffset = 0;
- int[] pixel = null;
- if (iArray == null)
- iArray = new int[w * h * numBands];
- for (int yy = y; yy < (y + h); yy++)
- {
- for (int xx = x; xx < (x + w); xx++)
- {
- pixel = getPixel(xx, yy, pixel, data);
- System.arraycopy(pixel, 0, iArray, outOffset, numBands);
- outOffset += numBands;
- }
- }
- return iArray;
- }
-
- /**
- * Returns an array containing the samples for the pixels in the region
- * specified by (x, y, w, h) in the specified data buffer. The array is
- * ordered by pixels (that is, all the samples for the first pixel are
- * grouped together, followed by all the samples for the second pixel, and so
- * on). If <code>fArray</code> is not <code>null</code>, it will be
- * populated with the sample values and returned as the result of this
- * function (this avoids allocating a new array instance).
- *
- * @param x the x-coordinate of the top-left pixel.
- * @param y the y-coordinate of the top-left pixel.
- * @param w the width of the region of pixels.
- * @param h the height of the region of pixels.
- * @param fArray an array to populate with the sample values and return as
- * the result (if <code>null</code>, a new array will be allocated).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @return The pixel sample values.
- *
- * @throws NullPointerException if <code>data</code> is <code>null</code>.
- */
- public float[] getPixels(int x, int y, int w, int h, float[] fArray,
- DataBuffer data)
- {
- int size = w * h;
- int outOffset = 0;
- float[] pixel = null;
- if (fArray == null) fArray = new float[w * h * numBands];
- for (int yy = y; yy < (y + h); yy++)
- {
- for (int xx = x; xx < (x + w); xx++)
- {
- pixel = getPixel(xx, yy, pixel, data);
- System.arraycopy(pixel, 0, fArray, outOffset, numBands);
- outOffset += numBands;
- }
- }
- return fArray;
- }
-
- /**
- * Returns an array containing the samples for the pixels in the region
- * specified by (x, y, w, h) in the specified data buffer. The array is
- * ordered by pixels (that is, all the samples for the first pixel are
- * grouped together, followed by all the samples for the second pixel, and so
- * on). If <code>dArray</code> is not <code>null</code>, it will be
- * populated with the sample values and returned as the result of this
- * function (this avoids allocating a new array instance).
- *
- * @param x the x-coordinate of the top-left pixel.
- * @param y the y-coordinate of the top-left pixel.
- * @param w the width of the region of pixels.
- * @param h the height of the region of pixels.
- * @param dArray an array to populate with the sample values and return as
- * the result (if <code>null</code>, a new array will be allocated).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @return The pixel sample values.
- *
- * @throws NullPointerException if <code>data</code> is <code>null</code>.
- */
- public double[] getPixels(int x, int y, int w, int h, double[] dArray,
- DataBuffer data)
- {
- int size = w * h;
- int outOffset = 0;
- double[] pixel = null;
- if (dArray == null)
- dArray = new double[w * h * numBands];
- for (int yy = y; yy < (y + h); yy++)
- {
- for (int xx = x; xx < (x + w); xx++)
- {
- pixel = getPixel(xx, yy, pixel, data);
- System.arraycopy(pixel, 0, dArray, outOffset, numBands);
- outOffset += numBands;
- }
- }
- return dArray;
- }
-
- /**
- * Returns the sample value for the pixel at (x, y) in the specified data
- * buffer.
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param b the band (in the range <code>0</code> to
- * <code>getNumBands() - 1</code>).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @return The sample value.
- *
- * @throws NullPointerException if <code>data</code> is <code>null</code>.
- */
- public abstract int getSample(int x, int y, int b, DataBuffer data);
-
- /**
- * Returns the sample value for the pixel at (x, y) in the specified data
- * buffer.
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param b the band (in the range <code>0</code> to
- * <code>getNumBands() - 1</code>).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @return The sample value.
- *
- * @throws NullPointerException if <code>data</code> is <code>null</code>.
- *
- * @see #getSample(int, int, int, DataBuffer)
- */
- public float getSampleFloat(int x, int y, int b, DataBuffer data)
- {
- return getSample(x, y, b, data);
- }
-
- /**
- * Returns the sample value for the pixel at (x, y) in the specified data
- * buffer.
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param b the band (in the range <code>0</code> to
- * <code>getNumBands() - 1</code>).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @return The sample value.
- *
- * @throws NullPointerException if <code>data</code> is <code>null</code>.
- *
- * @see #getSample(int, int, int, DataBuffer)
- */
- public double getSampleDouble(int x, int y, int b, DataBuffer data)
- {
- return getSampleFloat(x, y, b, data);
- }
-
- /**
- * Returns an array containing the samples from one band for the pixels in
- * the region specified by (x, y, w, h) in the specified data buffer. If
- * <code>iArray</code> is not <code>null</code>, it will be
- * populated with the sample values and returned as the result of this
- * function (this avoids allocating a new array instance).
- *
- * @param x the x-coordinate of the top-left pixel.
- * @param y the y-coordinate of the top-left pixel.
- * @param w the width of the region of pixels.
- * @param h the height of the region of pixels.
- * @param b the band (in the range <code>0</code> to
- * </code>getNumBands() - 1</code>).
- * @param iArray an array to populate with the sample values and return as
- * the result (if <code>null</code>, a new array will be allocated).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @return The sample values.
- *
- * @throws NullPointerException if <code>data</code> is <code>null</code>.
- */
- public int[] getSamples(int x, int y, int w, int h, int b,
- int[] iArray, DataBuffer data)
- {
- int size = w * h;
- int outOffset = 0;
- if (iArray == null)
- iArray = new int[size];
- for (int yy = y; yy < (y + h); yy++)
- {
- for (int xx = x; xx < (x + w); xx++)
- {
- iArray[outOffset++] = getSample(xx, yy, b, data);
- }
- }
- return iArray;
- }
-
- /**
- * Returns an array containing the samples from one band for the pixels in
- * the region specified by (x, y, w, h) in the specified data buffer. If
- * <code>fArray</code> is not <code>null</code>, it will be
- * populated with the sample values and returned as the result of this
- * function (this avoids allocating a new array instance).
- *
- * @param x the x-coordinate of the top-left pixel.
- * @param y the y-coordinate of the top-left pixel.
- * @param w the width of the region of pixels.
- * @param h the height of the region of pixels.
- * @param b the band (in the range <code>0</code> to
- * </code>getNumBands() - 1</code>).
- * @param fArray an array to populate with the sample values and return as
- * the result (if <code>null</code>, a new array will be allocated).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @return The sample values.
- *
- * @throws NullPointerException if <code>data</code> is <code>null</code>.
- */
- public float[] getSamples(int x, int y, int w, int h, int b,
- float[] fArray, DataBuffer data)
- {
- int size = w * h;
- int outOffset = 0;
- if (fArray == null)
- fArray = new float[size];
- for (int yy = y; yy < (y + h); yy++)
- {
- for (int xx = x; xx < (x + w); xx++)
- {
- fArray[outOffset++] = getSampleFloat(xx, yy, b, data);
- }
- }
- return fArray;
- }
-
- /**
- * Returns an array containing the samples from one band for the pixels in
- * the region specified by (x, y, w, h) in the specified data buffer. If
- * <code>dArray</code> is not <code>null</code>, it will be
- * populated with the sample values and returned as the result of this
- * function (this avoids allocating a new array instance).
- *
- * @param x the x-coordinate of the top-left pixel.
- * @param y the y-coordinate of the top-left pixel.
- * @param w the width of the region of pixels.
- * @param h the height of the region of pixels.
- * @param b the band (in the range <code>0</code> to
- * </code>getNumBands() - 1</code>).
- * @param dArray an array to populate with the sample values and return as
- * the result (if <code>null</code>, a new array will be allocated).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @return The sample values.
- *
- * @throws NullPointerException if <code>data</code> is <code>null</code>.
- */
- public double[] getSamples(int x, int y, int w, int h, int b,
- double[] dArray, DataBuffer data)
- {
- int size = w * h;
- int outOffset = 0;
- if (dArray == null)
- dArray = new double[size];
- for (int yy = y; yy < (y + h); yy++)
- {
- for (int xx = x; xx < (x + w); xx++)
- {
- dArray[outOffset++] = getSampleDouble(xx, yy, b, data);
- }
- }
- return dArray;
- }
-
- /**
- * Sets the samples for the pixel at (x, y) in the specified data buffer to
- * the specified values.
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param iArray the sample values (<code>null</code> not permitted).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @throws NullPointerException if either <code>iArray</code> or
- * <code>data</code> is <code>null</code>.
- */
- public void setPixel(int x, int y, int[] iArray, DataBuffer data)
- {
- for (int b = 0; b < numBands; b++)
- setSample(x, y, b, iArray[b], data);
- }
-
- /**
- * Sets the samples for the pixel at (x, y) in the specified data buffer to
- * the specified values.
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param fArray the sample values (<code>null</code> not permitted).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @throws NullPointerException if either <code>fArray</code> or
- * <code>data</code> is <code>null</code>.
- */
- public void setPixel(int x, int y, float[] fArray, DataBuffer data)
- {
- for (int b = 0; b < numBands; b++)
- setSample(x, y, b, fArray[b], data);
- }
-
- /**
- * Sets the samples for the pixel at (x, y) in the specified data buffer to
- * the specified values.
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param dArray the sample values (<code>null</code> not permitted).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @throws NullPointerException if either <code>dArray</code> or
- * <code>data</code> is <code>null</code>.
- */
- public void setPixel(int x, int y, double[] dArray, DataBuffer data)
- {
- for (int b = 0; b < numBands; b++)
- setSample(x, y, b, dArray[b], data);
- }
-
- /**
- * Sets the sample values for the pixels in the region specified by
- * (x, y, w, h) in the specified data buffer. The array is
- * ordered by pixels (that is, all the samples for the first pixel are
- * grouped together, followed by all the samples for the second pixel, and so
- * on).
- *
- * @param x the x-coordinate of the top-left pixel.
- * @param y the y-coordinate of the top-left pixel.
- * @param w the width of the region of pixels.
- * @param h the height of the region of pixels.
- * @param iArray the pixel sample values (<code>null</code> not permitted).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @throws NullPointerException if either <code>iArray</code> or
- * <code>data</code> is <code>null</code>.
- */
- public void setPixels(int x, int y, int w, int h, int[] iArray,
- DataBuffer data)
- {
- int inOffset = 0;
- int[] pixel = new int[numBands];
- for (int yy = y; yy < (y + h); yy++)
- {
- for (int xx = x; xx < (x + w); xx++)
- {
- System.arraycopy(iArray, inOffset, pixel, 0, numBands);
- setPixel(xx, yy, pixel, data);
- inOffset += numBands;
- }
- }
- }
-
- /**
- * Sets the sample values for the pixels in the region specified by
- * (x, y, w, h) in the specified data buffer. The array is
- * ordered by pixels (that is, all the samples for the first pixel are
- * grouped together, followed by all the samples for the second pixel, and so
- * on).
- *
- * @param x the x-coordinate of the top-left pixel.
- * @param y the y-coordinate of the top-left pixel.
- * @param w the width of the region of pixels.
- * @param h the height of the region of pixels.
- * @param fArray the pixel sample values (<code>null</code> not permitted).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @throws NullPointerException if either <code>fArray</code> or
- * <code>data</code> is <code>null</code>.
- */
- public void setPixels(int x, int y, int w, int h, float[] fArray,
- DataBuffer data)
- {
- int inOffset = 0;
- float[] pixel = new float[numBands];
- for (int yy = y; yy < (y + h); yy++)
- {
- for (int xx = x; xx < (x + w); xx++)
- {
- System.arraycopy(fArray, inOffset, pixel, 0, numBands);
- setPixel(xx, yy, pixel, data);
- inOffset += numBands;
- }
- }
- }
-
- /**
- * Sets the sample values for the pixels in the region specified by
- * (x, y, w, h) in the specified data buffer. The array is
- * ordered by pixels (that is, all the samples for the first pixel are
- * grouped together, followed by all the samples for the second pixel, and so
- * on).
- *
- * @param x the x-coordinate of the top-left pixel.
- * @param y the y-coordinate of the top-left pixel.
- * @param w the width of the region of pixels.
- * @param h the height of the region of pixels.
- * @param dArray the pixel sample values (<code>null</code> not permitted).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @throws NullPointerException if either <code>dArray</code> or
- * <code>data</code> is <code>null</code>.
- */
- public void setPixels(int x, int y, int w, int h, double[] dArray,
- DataBuffer data)
- {
- int inOffset = 0;
- double[] pixel = new double[numBands];
- for (int yy = y; yy < (y + h); yy++)
- {
- for (int xx = x; xx < (x + w); xx++)
- {
- System.arraycopy(dArray, inOffset, pixel, 0, numBands);
- setPixel(xx, yy, pixel, data);
- inOffset += numBands;
- }
- }
- }
-
- /**
- * Sets the sample value for a band for the pixel at (x, y) in the
- * specified data buffer.
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param b the band (in the range <code>0</code> to
- * <code>getNumBands() - 1</code>).
- * @param s the sample value.
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @throws NullPointerException if <code>data</code> is <code>null</code>.
- */
- public abstract void setSample(int x, int y, int b, int s,
- DataBuffer data);
-
- /**
- * Sets the sample value for a band for the pixel at (x, y) in the
- * specified data buffer.
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param b the band (in the range <code>0</code> to
- * <code>getNumBands() - 1</code>).
- * @param s the sample value.
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @throws NullPointerException if <code>data</code> is <code>null</code>.
- */
- public void setSample(int x, int y, int b, float s,
- DataBuffer data)
- {
- setSample(x, y, b, (int) s, data);
- }
-
- /**
- * Sets the sample value for a band for the pixel at (x, y) in the
- * specified data buffer.
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param b the band (in the range <code>0</code> to
- * <code>getNumBands() - 1</code>).
- * @param s the sample value.
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @throws NullPointerException if <code>data</code> is <code>null</code>.
- */
- public void setSample(int x, int y, int b, double s,
- DataBuffer data)
- {
- setSample(x, y, b, (float) s, data);
- }
-
- /**
- * Sets the sample values for one band for the pixels in the region
- * specified by (x, y, w, h) in the specified data buffer.
- *
- * @param x the x-coordinate of the top-left pixel.
- * @param y the y-coordinate of the top-left pixel.
- * @param w the width of the region of pixels.
- * @param h the height of the region of pixels.
- * @param b the band (in the range <code>0</code> to
- * </code>getNumBands() - 1</code>).
- * @param iArray the sample values (<code>null</code> not permitted).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @throws NullPointerException if either <code>iArray</code> or
- * <code>data</code> is <code>null</code>.
- */
- public void setSamples(int x, int y, int w, int h, int b,
- int[] iArray, DataBuffer data)
- {
- int size = w * h;
- int inOffset = 0;
- for (int yy = y; yy < (y + h); yy++)
- for (int xx = x; xx < (x + w); xx++)
- setSample(xx, yy, b, iArray[inOffset++], data);
- }
-
- /**
- * Sets the sample values for one band for the pixels in the region
- * specified by (x, y, w, h) in the specified data buffer.
- *
- * @param x the x-coordinate of the top-left pixel.
- * @param y the y-coordinate of the top-left pixel.
- * @param w the width of the region of pixels.
- * @param h the height of the region of pixels.
- * @param b the band (in the range <code>0</code> to
- * </code>getNumBands() - 1</code>).
- * @param fArray the sample values (<code>null</code> not permitted).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @throws NullPointerException if either <code>iArray</code> or
- * <code>data</code> is <code>null</code>.
- */
- public void setSamples(int x, int y, int w, int h, int b,
- float[] fArray, DataBuffer data)
- {
- int size = w * h;
- int inOffset = 0;
- for (int yy = y; yy < (y + h); yy++)
- for (int xx = x; xx < (x + w); xx++)
- setSample(xx, yy, b, fArray[inOffset++], data);
-
- }
-
- /**
- * Sets the sample values for one band for the pixels in the region
- * specified by (x, y, w, h) in the specified data buffer.
- *
- * @param x the x-coordinate of the top-left pixel.
- * @param y the y-coordinate of the top-left pixel.
- * @param w the width of the region of pixels.
- * @param h the height of the region of pixels.
- * @param b the band (in the range <code>0</code> to
- * </code>getNumBands() - 1</code>).
- * @param dArray the sample values (<code>null</code> not permitted).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @throws NullPointerException if either <code>iArray</code> or
- * <code>data</code> is <code>null</code>.
- */
- public void setSamples(int x, int y, int w, int h, int b,
- double[] dArray, DataBuffer data) {
- int size = w * h;
- int inOffset = 0;
- for (int yy = y; yy < (y + h); yy++)
- for (int xx = x; xx < (x + w); xx++)
- setSample(xx, yy, b, dArray[inOffset++], data);
- }
-
- /**
- * Creates a new <code>SampleModel</code> that is compatible with this
- * model and has the specified width and height.
- *
- * @param w the width (in pixels).
- * @param h the height (in pixels).
- *
- * @return The new sample model.
- */
- public abstract SampleModel createCompatibleSampleModel(int w, int h);
-
- /**
- * Return a SampleModel with a subset of the bands in this model.
- *
- * Selects bands.length bands from this sample model. The bands chosen
- * are specified in the indices of bands[]. This also permits permuting
- * the bands as well as taking a subset. Thus, giving an array with
- * 1, 2, 3, ..., numbands, will give an identical sample model.
- *
- * @param bands Array with band indices to include.
- * @return A new sample model
- */
- public abstract SampleModel createSubsetSampleModel(int[] bands);
-
- /**
- * Creates a new {@link DataBuffer} of the correct type and size for this
- * <code>SampleModel</code>.
- *
- * @return The data buffer.
- */
- public abstract DataBuffer createDataBuffer();
-
- /**
- * Returns an array containing the size (in bits) for each band accessed by
- * the <code>SampleModel</code>.
- *
- * @return An array.
- *
- * @see #getSampleSize(int)
- */
- public abstract int[] getSampleSize();
-
- /**
- * Returns the size (in bits) of the samples for the specified band.
- *
- * @param band the band (in the range <code>0</code> to
- * <code>getNumBands() - 1</code>).
- *
- * @return The sample size (in bits).
- */
- public abstract int getSampleSize(int band);
-}
diff --git a/libjava/classpath/java/awt/image/ShortLookupTable.java b/libjava/classpath/java/awt/image/ShortLookupTable.java
deleted file mode 100644
index 3e276fe..0000000
--- a/libjava/classpath/java/awt/image/ShortLookupTable.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/* ShortLookupTable.java -- Java class for a pixel translation table.
- Copyright (C) 2004, 2005, 2006, Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-/**
- * ShortLookupTable represents translation arrays for pixel values. It wraps
- * one or more data arrays for each layer (or component) in an image, such as
- * Alpha, R, G, and B. When doing translation, the offset is subtracted from
- * the pixel values to allow a subset of an array to be used.
- *
- * @author Jerry Quinn (jlquinn@optonline.net)
- * @version 1.0
- */
-public class ShortLookupTable extends LookupTable
-{
- // Array of translation tables.
- private short data[][];
-
- /**
- * Creates a new <code>ShortLookupTable</code> instance.
- *
- * Offset is subtracted from pixel values when looking up in the translation
- * tables. If data.length is one, the same table is applied to all pixel
- * components.
- *
- * @param offset Offset to be subtracted.
- * @param data Array of lookup tables.
- * @exception IllegalArgumentException if offset &lt; 0 or data.length &lt; 1.
- */
- public ShortLookupTable(int offset, short[][] data)
- throws IllegalArgumentException
- {
- super(offset, data.length);
-
- // tests show that Sun's implementation creates a new array to store the
- // references from the incoming 'data' array - not sure why, but we'll
- // match that behaviour just in case it matters...
- this.data = new short[data.length][];
- for (int i = 0; i < data.length; i++)
- this.data[i] = data[i];
- }
-
- /**
- * Creates a new <code>ShortLookupTable</code> instance.
- *
- * Offset is subtracted from pixel values when looking up in the translation
- * table. The same table is applied to all pixel components.
- *
- * @param offset Offset to be subtracted.
- * @param data Lookup table for all components (<code>null</code> not
- * permitted).
- * @exception IllegalArgumentException if offset &lt; 0.
- */
- public ShortLookupTable(int offset, short[] data)
- throws IllegalArgumentException
- {
- super(offset, 1);
- if (data == null)
- throw new NullPointerException("Null 'data' argument.");
- this.data = new short[][] {data};
- }
-
- /**
- * Return the lookup tables. This is a reference to the actual table, so
- * modifying the contents of the returned array will modify the lookup table.
- *
- * @return The lookup table.
- */
- public final short[][] getTable()
- {
- return data;
- }
-
- /**
- * Return translated values for a pixel.
- *
- * For each value in the pixel src, use the value minus offset as an index
- * in the component array and copy the value there to the output for the
- * component. If dest is null, the output is a new array, otherwise the
- * translated values are written to dest. Dest can be the same array as
- * src.
- *
- * For example, if the pixel src is [2, 4, 3], and offset is 1, the output
- * is [comp1[1], comp2[3], comp3[2]], where comp1, comp2, and comp3 are the
- * translation arrays.
- *
- * @param src Component values of a pixel.
- * @param dst Destination array for values, or null.
- * @return Translated values for the pixel.
- */
- public int[] lookupPixel(int[] src, int[] dst)
- throws ArrayIndexOutOfBoundsException
- {
- if (dst == null)
- dst = new int[src.length];
-
- if (data.length == 1)
- for (int i = 0; i < src.length; i++)
- dst[i] = data[0][src[i] - offset];
- else
- for (int i = 0; i < src.length; i++)
- dst[i] = data[i][src[i] - offset];
-
- return dst;
- }
-
- /**
- * Return translated values for a pixel.
- *
- * For each value in the pixel src, use the value minus offset as an index
- * in the component array and copy the value there to the output for the
- * component. If dest is null, the output is a new array, otherwise the
- * translated values are written to dest. Dest can be the same array as
- * src.
- *
- * For example, if the pixel src is [2, 4, 3], and offset is 1, the output
- * is [comp1[1], comp2[3], comp3[2]], where comp1, comp2, and comp3 are the
- * translation arrays.
- *
- * @param src Component values of a pixel.
- * @param dst Destination array for values, or null.
- * @return Translated values for the pixel.
- *
- */
- public short[] lookupPixel(short[] src, short[] dst)
- throws ArrayIndexOutOfBoundsException
- {
- if (dst == null)
- dst = new short[src.length];
-
- if (data.length == 1)
- for (int i = 0; i < src.length; i++)
- dst[i] = data[0][((int) src[i]) - offset];
- else
- for (int i = 0; i < src.length; i++)
- dst[i] = data[i][((int) src[i]) - offset];
-
- return dst;
-
- }
-}
diff --git a/libjava/classpath/java/awt/image/SinglePixelPackedSampleModel.java b/libjava/classpath/java/awt/image/SinglePixelPackedSampleModel.java
deleted file mode 100644
index 143581d..0000000
--- a/libjava/classpath/java/awt/image/SinglePixelPackedSampleModel.java
+++ /dev/null
@@ -1,586 +0,0 @@
-/* Copyright (C) 2000, 2002, 2003, 2004, 2006, Free Software Foundation
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package java.awt.image;
-
-import java.util.Arrays;
-
-import gnu.java.awt.BitMaskExtent;
-import gnu.java.lang.CPStringBuilder;
-
-/**
- * A <code>SampleModel</code> used when all samples are stored in a single
- * data element in the {@link DataBuffer}, and each data element contains
- * samples for one pixel only.
- *
- * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
- */
-public class SinglePixelPackedSampleModel extends SampleModel
-{
- private int scanlineStride;
- private int[] bitMasks;
- private int[] bitOffsets;
- private int[] sampleSize;
-
- /**
- * Creates a new <code>SinglePixelPackedSampleModel</code>.
- *
- * @param dataType the data buffer type.
- * @param w the width (in pixels).
- * @param h the height (in pixels).
- * @param bitMasks an array containing the bit mask used to extract the
- * sample value for each band.
- */
- public SinglePixelPackedSampleModel(int dataType, int w, int h,
- int[] bitMasks)
- {
- this(dataType, w, h, w, bitMasks);
- }
-
- /**
- * Creates a new <code>SinglePixelPackedSampleModel</code>.
- *
- * @param dataType the data buffer type.
- * @param w the width (in pixels).
- * @param h the height (in pixels).
- * @param scanlineStride the number of data elements between a pixel on one
- * row and the corresponding pixel on the next row.
- * @param bitMasks an array containing the bit mask used to extract the
- * sample value for each band.
- */
- public SinglePixelPackedSampleModel(int dataType, int w, int h,
- int scanlineStride, int[] bitMasks)
- {
- super(dataType, w, h, bitMasks.length);
-
- switch (dataType)
- {
- case DataBuffer.TYPE_BYTE:
- case DataBuffer.TYPE_USHORT:
- case DataBuffer.TYPE_INT:
- break;
- default:
- throw new IllegalArgumentException(
- "SinglePixelPackedSampleModel unsupported dataType");
- }
-
- this.scanlineStride = scanlineStride;
- this.bitMasks = bitMasks;
-
- bitOffsets = new int[numBands];
- sampleSize = new int[numBands];
-
- BitMaskExtent extent = new BitMaskExtent();
- for (int b = 0; b < numBands; b++)
- {
- // the mask is an unsigned integer
- long mask = bitMasks[b] & 0xFFFFFFFFL;
- extent.setMask(mask);
- sampleSize[b] = extent.bitWidth;
- bitOffsets[b] = extent.leastSignificantBit;
- }
- }
-
- /**
- * Returns the number of data elements.
- *
- * @return <code>1</code>.
- */
- public int getNumDataElements()
- {
- return 1;
- }
-
- /**
- * Creates a new <code>SampleModel</code> that is compatible with this
- * model and has the specified width and height.
- *
- * @param w the width (in pixels).
- * @param h the height (in pixels).
- *
- * @return The new sample model.
- */
- public SampleModel createCompatibleSampleModel(int w, int h)
- {
- /* FIXME: We can avoid recalculation of bit offsets and sample
- sizes here by passing these from the current instance to a
- special private constructor. */
- return new SinglePixelPackedSampleModel(dataType, w, h, bitMasks);
- }
-
-
- /**
- * Creates a DataBuffer for holding pixel data in the format and
- * layout described by this SampleModel. The returned buffer will
- * consist of one single bank.
- *
- * @return The data buffer.
- */
- public DataBuffer createDataBuffer()
- {
- // We can save (scanlineStride - width) pixels at the very end of
- // the buffer. The Sun reference implementation (J2SE 1.3.1 and
- // 1.4.1_01) seems to do this; tested with Mauve test code.
- int size = scanlineStride * (height - 1) + width;
-
- DataBuffer buffer = null;
- switch (getTransferType())
- {
- case DataBuffer.TYPE_BYTE:
- buffer = new DataBufferByte(size);
- break;
- case DataBuffer.TYPE_USHORT:
- buffer = new DataBufferUShort(size);
- break;
- case DataBuffer.TYPE_INT:
- buffer = new DataBufferInt(size);
- break;
- }
- return buffer;
- }
-
- /**
- * Returns an array containing the size (in bits) for each band accessed by
- * the <code>SampleModel</code>.
- *
- * @return An array.
- *
- * @see #getSampleSize(int)
- */
- public int[] getSampleSize()
- {
- return (int[]) sampleSize.clone();
- }
-
- /**
- * Returns the size (in bits) of the samples for the specified band.
- *
- * @param band the band (in the range <code>0</code> to
- * <code>getNumBands() - 1</code>).
- *
- * @return The sample size (in bits).
- */
- public int getSampleSize(int band)
- {
- return sampleSize[band];
- }
-
- /**
- * Returns the index in the data buffer that stores the pixel at (x, y).
- *
- * @param x the x-coordinate.
- * @param y the y-coordinate.
- *
- * @return The index in the data buffer that stores the pixel at (x, y).
- */
- public int getOffset(int x, int y)
- {
- return scanlineStride*y + x;
- }
-
- public int[] getBitOffsets()
- {
- return bitOffsets;
- }
-
- public int[] getBitMasks()
- {
- return bitMasks;
- }
-
- /**
- * Returns the number of data elements from a pixel in one row to the
- * corresponding pixel in the next row.
- *
- * @return The scanline stride.
- */
- public int getScanlineStride()
- {
- return scanlineStride;
- }
-
- /**
- * Creates a new <code>SinglePixelPackedSampleModel</code> that accesses
- * the specified subset of bands.
- *
- * @param bands an array containing band indices (<code>null</code> not
- * permitted).
- *
- * @return A new sample model.
- *
- * @throws NullPointerException if <code>bands</code> is <code>null</code>.
- * @throws RasterFormatException if <code>bands.length</code> is greater
- * than the number of bands in this model.
- */
- public SampleModel createSubsetSampleModel(int[] bands)
- {
- if (bands.length > numBands)
- throw new RasterFormatException("Too many bands.");
-
- int numBands = bands.length;
-
- int[] bitMasks = new int[numBands];
-
- for (int b = 0; b < numBands; b++)
- bitMasks[b] = this.bitMasks[bands[b]];
-
- return new SinglePixelPackedSampleModel(dataType, width, height,
- scanlineStride, bitMasks);
- }
-
- public Object getDataElements(int x, int y, Object obj,
- DataBuffer data)
- {
- int type = getTransferType();
- Object ret = null;
- switch (type)
- {
- case DataBuffer.TYPE_BYTE:
- {
- byte[] in = (byte[]) obj;
- if (in == null)
- in = new byte[1];
- in[0] = (byte) data.getElem(x + y * scanlineStride);
- ret = in;
- }
- break;
- case DataBuffer.TYPE_USHORT:
- {
- short[] in = (short[]) obj;
- if (in == null)
- in = new short[1];
- in[0] = (short) data.getElem(x + y * scanlineStride);
- ret = in;
- }
- break;
- case DataBuffer.TYPE_INT:
- {
- int[] in = (int[]) obj;
- if (in == null)
- in = new int[1];
- in[0] = data.getElem(x + y * scanlineStride);
- ret = in;
- }
- break;
- }
- return ret;
- }
-
- /**
- * Returns an array containing the samples for the pixel at (x, y) in the
- * specified data buffer. If <code>iArray</code> is not <code>null</code>,
- * it will be populated with the sample values and returned as the result of
- * this function (this avoids allocating a new array instance).
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param iArray an array to populate with the sample values and return as
- * the result (if <code>null</code>, a new array will be allocated).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @return The pixel sample values.
- *
- * @throws NullPointerException if <code>data</code> is <code>null</code>.
- */
- public int[] getPixel(int x, int y, int[] iArray, DataBuffer data)
- {
- int offset = scanlineStride*y + x;
- if (iArray == null) iArray = new int[numBands];
- int samples = data.getElem(offset);
-
- for (int b = 0; b < numBands; b++)
- iArray[b] = (samples & bitMasks[b]) >>> bitOffsets[b];
-
- return iArray;
- }
-
- /**
- * Returns an array containing the samples for the pixels in the region
- * specified by (x, y, w, h) in the specified data buffer. The array is
- * ordered by pixels (that is, all the samples for the first pixel are
- * grouped together, followed by all the samples for the second pixel, and so
- * on). If <code>iArray</code> is not <code>null</code>, it will be
- * populated with the sample values and returned as the result of this
- * function (this avoids allocating a new array instance).
- *
- * @param x the x-coordinate of the top-left pixel.
- * @param y the y-coordinate of the top-left pixel.
- * @param w the width of the region of pixels.
- * @param h the height of the region of pixels.
- * @param iArray an array to populate with the sample values and return as
- * the result (if <code>null</code>, a new array will be allocated).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @return The pixel sample values.
- *
- * @throws NullPointerException if <code>data</code> is <code>null</code>.
- */
- public int[] getPixels(int x, int y, int w, int h, int[] iArray,
- DataBuffer data)
- {
- int offset = scanlineStride*y + x;
- if (iArray == null) iArray = new int[numBands*w*h];
- int outOffset = 0;
- for (y = 0; y < h; y++)
- {
- int lineOffset = offset;
- for (x = 0; x < w; x++)
- {
- int samples = data.getElem(lineOffset++);
- for (int b = 0; b < numBands; b++)
- iArray[outOffset++] = (samples & bitMasks[b]) >>> bitOffsets[b];
- }
- offset += scanlineStride;
- }
- return iArray;
- }
-
- /**
- * Returns the sample value for the pixel at (x, y) in the specified data
- * buffer.
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param b the band (in the range <code>0</code> to
- * <code>getNumBands() - 1</code>).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @return The sample value.
- *
- * @throws NullPointerException if <code>data</code> is <code>null</code>.
- */
- public int getSample(int x, int y, int b, DataBuffer data)
- {
- int offset = scanlineStride*y + x;
- int samples = data.getElem(offset);
- return (samples & bitMasks[b]) >>> bitOffsets[b];
- }
-
- public void setDataElements(int x, int y, Object obj, DataBuffer data)
- {
- int transferType = getTransferType();
- switch (transferType)
- {
- case DataBuffer.TYPE_BYTE:
- {
- byte[] in = (byte[]) obj;
- data.setElem(y * scanlineStride + x, ((int) in[0]) & 0xff);
- }
- break;
- case DataBuffer.TYPE_USHORT:
- {
- short[] in = (short[]) obj;
- data.setElem(y * scanlineStride + x, ((int) in[0]) & 0xffff);
- }
- break;
- case DataBuffer.TYPE_INT:
- {
- int[] in = (int[]) obj;
- data.setElem(y * scanlineStride + x, in[0]);
- break;
- }
- }
- }
-
- /**
- * Sets the samples for the pixel at (x, y) in the specified data buffer to
- * the specified values.
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param iArray the sample values (<code>null</code> not permitted).
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @throws NullPointerException if either <code>iArray</code> or
- * <code>data</code> is <code>null</code>.
- */
- public void setPixel(int x, int y, int[] iArray, DataBuffer data)
- {
- int offset = scanlineStride*y + x;
-
- int samples = 0;
- for (int b = 0; b < numBands; b++)
- samples |= (iArray[b] << bitOffsets[b]) & bitMasks[b];
-
- data.setElem(offset, samples);
- }
-
- /**
- * This method implements a more efficient way to set pixels than the default
- * implementation of the super class. It copies the pixel components directly
- * from the input array instead of creating a intermediate buffer.
- * @param x The x-coordinate of the pixel rectangle in <code>obj</code>.
- * @param y The y-coordinate of the pixel rectangle in <code>obj</code>.
- * @param w The width of the pixel rectangle in <code>obj</code>.
- * @param h The height of the pixel rectangle in <code>obj</code>.
- * @param iArray The primitive array containing the pixels to set.
- * @param data The DataBuffer to store the pixels into.
- * @see java.awt.image.SampleModel#setPixels(int, int, int, int, int[],
- * java.awt.image.DataBuffer)
- */
- public void setPixels(int x, int y, int w, int h, int[] iArray,
- DataBuffer data)
- {
- int inOffset = 0;
- for (int yy=y; yy<(y+h); yy++)
- {
- int offset = scanlineStride*yy + x;
- for (int xx=x; xx<(x+w); xx++)
- {
- int samples = 0;
- for (int b = 0; b < numBands; b++)
- samples |= (iArray[inOffset+b] << bitOffsets[b]) & bitMasks[b];
- data.setElem(0, offset, samples);
- inOffset += numBands;
- offset += 1;
- }
- }
- }
-
- /**
- * Sets the sample value for a band for the pixel at (x, y) in the
- * specified data buffer.
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param b the band (in the range <code>0</code> to
- * <code>getNumBands() - 1</code>).
- * @param s the sample value.
- * @param data the data buffer (<code>null</code> not permitted).
- *
- * @throws NullPointerException if <code>data</code> is <code>null</code>.
- */
- public void setSample(int x, int y, int b, int s, DataBuffer data)
- {
- int offset = scanlineStride*y + x;
- int samples = data.getElem(offset);
- int bitMask = bitMasks[b];
- samples &= ~bitMask;
- samples |= (s << bitOffsets[b]) & bitMask;
- data.setElem(offset, samples);
- }
-
- /**
- * Tests this sample model for equality with an arbitrary object. This
- * method returns <code>true</code> if and only if:
- * <ul>
- * <li><code>obj</code> is not <code>null</code>;
- * <li><code>obj</code> is an instance of
- * <code>SinglePixelPackedSampleModel</code>;
- * <li>both models have the same:
- * <ul>
- * <li><code>dataType</code>;
- * <li><code>width</code>;
- * <li><code>height</code>;
- * <li><code>numBands</code>;
- * <li><code>scanlineStride</code>;
- * <li><code>bitMasks</code>;
- * <li><code>bitOffsets</code>.
- * </ul>
- * </li>
- * </ul>
- *
- * @param obj the object (<code>null</code> permitted)
- *
- * @return <code>true</code> if this model is equal to <code>obj</code>, and
- * <code>false</code> otherwise.
- */
- public boolean equals(Object obj)
- {
- if (this == obj)
- return true;
- if (! (obj instanceof SinglePixelPackedSampleModel))
- return false;
- SinglePixelPackedSampleModel that = (SinglePixelPackedSampleModel) obj;
- if (this.dataType != that.dataType)
- return false;
- if (this.width != that.width)
- return false;
- if (this.height != that.height)
- return false;
- if (this.numBands != that.numBands)
- return false;
- if (this.scanlineStride != that.scanlineStride)
- return false;
- if (!Arrays.equals(this.bitMasks, that.bitMasks))
- return false;
- if (!Arrays.equals(this.bitOffsets, that.bitOffsets))
- return false;
- return true;
- }
-
- /**
- * Returns a hash code for this <code>SinglePixelPackedSampleModel</code>.
- *
- * @return A hash code.
- */
- public int hashCode()
- {
- // this hash code won't match Sun's, but that shouldn't matter...
- int result = 193;
- result = 37 * result + dataType;
- result = 37 * result + width;
- result = 37 * result + height;
- result = 37 * result + numBands;
- result = 37 * result + scanlineStride;
- for (int i = 0; i < bitMasks.length; i++)
- result = 37 * result + bitMasks[i];
- for (int i = 0; i < bitOffsets.length; i++)
- result = 37 * result + bitOffsets[i];
- return result;
- }
-
- /**
- * Creates a String with some information about this SampleModel.
- * @return A String describing this SampleModel.
- * @see java.lang.Object#toString()
- */
- public String toString()
- {
- CPStringBuilder result = new CPStringBuilder();
- result.append(getClass().getName());
- result.append("[");
- result.append("scanlineStride=").append(scanlineStride);
- for(int i = 0; i < bitMasks.length; i+=1)
- {
- result.append(", mask[").append(i).append("]=0x").append(
- Integer.toHexString(bitMasks[i]));
- }
-
- result.append("]");
- return result.toString();
- }
-}
diff --git a/libjava/classpath/java/awt/image/TileObserver.java b/libjava/classpath/java/awt/image/TileObserver.java
deleted file mode 100644
index 769888e..0000000
--- a/libjava/classpath/java/awt/image/TileObserver.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/* TileObserver.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-/**
- * NEEDS DOCUMENTATION
- */
-public interface TileObserver
-{
- void tileUpdate(WritableRenderedImage src, int x, int y, boolean writable);
-} // interface TileObserver
diff --git a/libjava/classpath/java/awt/image/VolatileImage.java b/libjava/classpath/java/awt/image/VolatileImage.java
deleted file mode 100644
index 3086541..0000000
--- a/libjava/classpath/java/awt/image/VolatileImage.java
+++ /dev/null
@@ -1,253 +0,0 @@
-/* VolatileImage.java -- a hardware-accelerated image buffer
- Copyright (C) 2002, 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.GraphicsConfiguration;
-import java.awt.Image;
-import java.awt.Transparency;
-import java.awt.ImageCapabilities;
-
-/**
- * VolatileImage represents a hardware-accelerated graphics buffer.
- * The native graphics system may free or damage the resources
- * occupied by a VolatileImage at any time. As such, one must
- * frequently check the "validity" of the image buffer's resources.
- *
- * A volatile image's "validity" depends on multiple factors. Its
- * resources may have become unavailble in which case you must
- * reallocate them. If you move the image from one output device to
- * another, you may need to recreate the image's resources if the new
- * output device's capabilities don't match the old one's. Finally,
- * if the contents of the image's buffer have been damaged you must
- * re-render the image.
- *
- * VolatileImages should always be created using either
- * Component.createVolatileImage or
- * GraphicsConfiguration.createCompatibleVolatileImage.
- */
-public abstract class VolatileImage extends Image
- implements Transparency
-{
- /**
- * One of validate's possible return values. Indicates that the
- * image buffer matches its graphics configuration's capabilities
- * and that its resources are initialized and ready to be drawn
- * into. Also implies that any existing image rendered to the
- * buffer is intact and need not be re-rendered.
- */
- public static final int IMAGE_OK = 0;
-
- /**
- * One of validate's possible return values. Indicates that the
- * image buffer has been restored, meaning that it is valid and
- * ready-to-use but that its previous contents have been lost. This
- * return value implies that the image needs to be re-rendered.
- */
- public static final int IMAGE_RESTORED = 1;
-
- /**
- * One of validate's possible return values. Indicates that the
- * image buffer type is unsupported by the current graphics
- * configuration. The graphics configuration may have changed, for
- * example if the image moved from one output device to another.
- * This return value implies that the image buffer's resources
- * should be re-acquired.
- */
- public static final int IMAGE_INCOMPATIBLE = 2;
-
- /**
- * This image's transparency type. One of Transparency.BITMASK,
- * Transparency.OPAQUE or Transparency.TRANSLUCENT.
- *
- * @since 1.5
- */
- protected int transparency;
-
- /**
- * Default constructor. VolatileImages should not be created
- * directly. Rather, you should use Component.createVolatileImage
- * or GraphicsConfiguration.createCompatibleVolatileImage.
- */
- public VolatileImage()
- {
- }
-
- /**
- * Returns an image representing the current state of the volatile
- * image buffer. The returned image is static meaning that it is
- * not updated after being created. It is a snapshot of the
- * volatile image buffer at the time getSnapshot is called.
- *
- * This method, which reads pixels from the volatile image buffer,
- * may be less-performant than methods that write pixels since
- * VolatileImages are typically optimized for writing.
- *
- * @return a BufferedImage representing this VolatileImage
- */
- public abstract BufferedImage getSnapshot();
-
- /**
- * Returns the width of this image buffer.
- *
- * @return the width of this VolatileImage
- */
- public abstract int getWidth();
-
- /**
- * Returns the height of this image buffer.
- *
- * @return the height of this VolatileImage
- */
- public abstract int getHeight();
-
- /**
- * Calling this method is equivalent to calling
- * getSnapshot().getSource(). The ImageProducer produces pixels
- * from the BufferedImage snapshot and not from the VolatileImage
- * itself. Thus, changes to the VolatileImage that occur after this
- * ImageProducer has been retrieved will not be reflected in the
- * produced pixels.
- *
- * This method, which reads pixels from the volatile image buffer,
- * may be less-performant than methods that write pixels since
- * VolatileImages are typically optimized for writing.
- *
- * @return an ImageProducer for a static BufferedImage snapshot of
- * this image buffer
- */
- public ImageProducer getSource()
- {
- return getSnapshot().getSource();
- }
-
- /**
- * Releases the system resources taken by this image.
- */
- public void flush()
- {
- }
-
- /**
- * Returns a Graphics2D object that can be used to draw onto this
- * image. This method is present for backwards-compatibility. It
- * simply returns the result of createGraphics.
- *
- * @return a Graphics2D object that can be used to draw onto this
- * image
- */
- public Graphics getGraphics()
- {
- return createGraphics();
- }
-
- /**
- * Returns a Graphics2D object that can be used to draw onto this
- * image.
- *
- * @return a Graphics2D object that can be used to draw onto this
- * image
- */
- public abstract Graphics2D createGraphics();
-
- /**
- * Validates and restores this image. If the image buffer has
- * become unavailable for further use since the last call to
- * validate, validate will allocate a new image buffer. The image
- * is also "validated" against the GraphicsConfiguration parameter.
- *
- * "Validating" the image means checking that the capabilities it
- * requires of the output device are indeed supported by the given
- * output device. If the image's characteristics, which can be
- * highly output device-specific, are not supported by the graphics
- * configuration, then IMAGE_INCOMPATIBLE will be returned. This
- * can happen, for example, if this image was created on one output
- * device, then validated against a different output device with
- * different capabilities. Calling validate with a NULL gc argument
- * causes validate to skip the validation test.
- *
- * @param gc graphics configuration against which to validate or
- * NULL
- *
- * @return a code indicating the result of validation. One of:
- * <ul>
- * <li><code>IMAGE_OK</code> if the image did not need to be
- * validated and didn't need to be restored</li>
- * <li><code>IMAGE_RESTORED</code> if the image may need to be
- * re-rendered.</li>
- * <li><code>IMAGE_INCOMPATIBLE</code> if this image's
- * requirements are not fulfilled by the graphics configuration
- * parameter. This implies that you need to create a new
- * VolatileImage for the different GraphicsConfiguration or
- * Component. This return value implies nothing about whether the
- * image is valid or needs to be re-rendered.</li>
- * </ul>
- */
- public abstract int validate(GraphicsConfiguration gc);
-
- /**
- * Returns true if the contents of the image buffer have been
- * damaged or if the image buffer's resources have been reclaimed by
- * the graphics system. You should call this method after a series
- * of rendering operations to or from the image, to see if the image
- * buffer needs to be revalidated or the image re-rendered.
- *
- * @return true if the validate should be called, false otherwise
- */
- public abstract boolean contentsLost();
-
- /**
- * Returns the capabilities of this image buffer.
- *
- * @return the capabilities of this image buffer
- */
- public abstract ImageCapabilities getCapabilities();
-
- /**
- * Returns the transparency type of this image.
- *
- * @return Transparency.OPAQUE, Transparency.BITMASK or
- * Transparency.TRANSLUCENT
- */
- public int getTransparency()
- {
- return transparency;
- }
-}
diff --git a/libjava/classpath/java/awt/image/WritableRaster.java b/libjava/classpath/java/awt/image/WritableRaster.java
deleted file mode 100644
index 68774f7..0000000
--- a/libjava/classpath/java/awt/image/WritableRaster.java
+++ /dev/null
@@ -1,448 +0,0 @@
-/* Copyright (C) 2000, 2002, 2003, 2006, Free Software Foundation
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-import java.awt.Point;
-import java.awt.Rectangle;
-
-/**
- * A raster with methods to support updating pixel values.
- *
- * @author Rolf W. Rasmussen (rolfwr@ii.uib.no)
- */
-public class WritableRaster extends Raster
-{
- /**
- * Creates a new <code>WritableRaster</code>.
- *
- * @param sampleModel the sample model.
- * @param origin the origin.
- */
- protected WritableRaster(SampleModel sampleModel, Point origin)
- {
- this(sampleModel, sampleModel.createDataBuffer(), origin);
- }
-
- /**
- * Creates a new <code>WritableRaster</code> instance.
- *
- * @param sampleModel the sample model.
- * @param dataBuffer the data buffer.
- * @param origin the origin.
- */
- protected WritableRaster(SampleModel sampleModel, DataBuffer dataBuffer,
- Point origin)
- {
- this(sampleModel, dataBuffer,
- new Rectangle(origin != null ? origin.x : 0,
- origin != null ? origin.y : 0,
- sampleModel.getWidth(), sampleModel.getHeight()),
- origin, null);
- }
-
- /**
- * Creates a new <code>WritableRaster</code> instance.
- *
- * @param sampleModel the sample model.
- * @param dataBuffer the data buffer.
- * @param aRegion the raster's bounds.
- * @param sampleModelTranslate the translation.
- * @param parent the parent.
- */
- protected WritableRaster(SampleModel sampleModel,
- DataBuffer dataBuffer,
- Rectangle aRegion,
- Point sampleModelTranslate,
- WritableRaster parent)
- {
- super(sampleModel, dataBuffer, aRegion, sampleModelTranslate, parent);
- }
-
- /**
- * Returns the raster's parent, cast as a {@link WritableRaster}.
- *
- * @return The raster's parent.
- */
- public WritableRaster getWritableParent()
- {
- return (WritableRaster) getParent();
- }
-
- /**
- * @param childMinX
- * @param childMinY
- * @return
- */
- public WritableRaster createWritableTranslatedChild(int childMinX,
- int childMinY)
- {
- return createWritableChild(minX, minY, width, height,
- childMinX, childMinY, null);
- }
-
- /**
- *
- * @param parentX
- * @param parentY
- * @param w
- * @param h
- * @param childMinX
- * @param childMinY
- * @param bandList
- * @return
- */
- public WritableRaster createWritableChild(int parentX, int parentY,
- int w, int h, int childMinX, int childMinY, int[] bandList)
- {
- // This mirrors the code from the super class
-
- if (parentX < minX || parentX + w > minX + width
- || parentY < minY || parentY + h > minY + height)
- throw new RasterFormatException("Child raster extends beyond parent");
-
- SampleModel sm = (bandList == null) ?
- sampleModel :
- sampleModel.createSubsetSampleModel(bandList);
-
- return new WritableRaster(sm, getDataBuffer(),
- new Rectangle(childMinX, childMinY, w, h),
- new Point(sampleModelTranslateX + childMinX -
- parentX,
- sampleModelTranslateY + childMinY -
- parentY),
- this);
- }
-
- public Raster createChild(int parentX, int parentY, int width,
- int height, int childMinX, int childMinY,
- int[] bandList)
- {
- if (parentX < minX || parentX + width > minX + this.width
- || parentY < minY || parentY + height > minY + this.height)
- throw new RasterFormatException("Child raster extends beyond parent");
-
- SampleModel sm = (bandList == null) ?
- sampleModel :
- sampleModel.createSubsetSampleModel(bandList);
-
- return new WritableRaster(sm, dataBuffer,
- new Rectangle(childMinX, childMinY, width, height),
- new Point(sampleModelTranslateX + childMinX - parentX,
- sampleModelTranslateY + childMinY - parentY),
- this);
- }
-
- public void setDataElements(int x, int y, Object inData)
- {
- sampleModel.setDataElements(x - sampleModelTranslateX,
- y - sampleModelTranslateY, inData, dataBuffer);
- }
-
- public void setDataElements(int x, int y, Raster inRaster)
- {
- Object dataElements = getDataElements(0, 0, inRaster.getWidth(),
- inRaster.getHeight(), null);
- setDataElements(x, y, dataElements);
- }
-
- public void setDataElements(int x, int y, int w, int h, Object inData)
- {
- sampleModel.setDataElements(x - sampleModelTranslateX,
- y - sampleModelTranslateY, w, h, inData, dataBuffer);
- }
-
- /**
- *
- * @param srcRaster
- */
- public void setRect(Raster srcRaster)
- {
- setRect(0, 0, srcRaster);
- }
-
- /**
- *
- * @param dx
- * @param dy
- * @param srcRaster
- */
- public void setRect(int dx, int dy, Raster srcRaster)
- {
- Rectangle targetUnclipped = new Rectangle(srcRaster.getMinX() + dx,
- srcRaster.getMinY() + dy, srcRaster.getWidth(), srcRaster.getHeight());
-
- Rectangle target = getBounds().intersection(targetUnclipped);
-
- if (target.isEmpty()) return;
-
- int sx = target.x - dx;
- int sy = target.y - dy;
-
- // FIXME: Do tests on rasters and use get/set data instead.
-
- /* The JDK documentation seems to imply this implementation.
- (the trucation of higher bits), but an implementation using
- get/setDataElements would be more efficient. None of the
- implementations would do anything sensible when the sample
- models don't match.
-
- But this is probably not the place to consider such
- optimizations.*/
-
- int[] pixels = srcRaster.getPixels(sx, sy, target.width, target.height,
- (int[]) null);
-
- setPixels(target.x, target.y, target.width, target.height, pixels);
- }
-
- /**
- * Sets the samples for the pixel at (x, y) in the raster to the specified
- * values.
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param iArray the sample values (<code>null</code> not permitted).
- *
- * @throws NullPointerException if <code>iArray</code> is <code>null</code>.
- */
- public void setPixel(int x, int y, int[] iArray)
- {
- sampleModel.setPixel(x - sampleModelTranslateX, y - sampleModelTranslateY,
- iArray, dataBuffer);
- }
-
- /**
- * Sets the samples for the pixel at (x, y) in the raster to the specified
- * values.
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param fArray the sample values (<code>null</code> not permitted).
- *
- * @throws NullPointerException if <code>fArray</code> is <code>null</code>.
- */
- public void setPixel(int x, int y, float[] fArray)
- {
- sampleModel.setPixel(x - sampleModelTranslateX, y - sampleModelTranslateY,
- fArray, dataBuffer);
- }
-
- /**
- * Sets the samples for the pixel at (x, y) in the raster to the specified
- * values.
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param dArray the sample values (<code>null</code> not permitted).
- *
- * @throws NullPointerException if <code>dArray</code> is <code>null</code>.
- */
- public void setPixel(int x, int y, double[] dArray)
- {
- sampleModel.setPixel(x - sampleModelTranslateX, y - sampleModelTranslateY,
- dArray, dataBuffer);
- }
-
- /**
- * Sets the sample values for the pixels in the region specified by
- * (x, y, w, h) in the raster. The array is ordered by pixels (that is, all
- * the samples for the first pixel are grouped together, followed by all the
- * samples for the second pixel, and so on).
- *
- * @param x the x-coordinate of the top-left pixel.
- * @param y the y-coordinate of the top-left pixel.
- * @param w the width of the region of pixels.
- * @param h the height of the region of pixels.
- * @param iArray the pixel sample values (<code>null</code> not permitted).
- *
- * @throws NullPointerException if <code>iArray</code> is <code>null</code>.
- */
- public void setPixels(int x, int y, int w, int h, int[] iArray)
- {
- sampleModel.setPixels(x - sampleModelTranslateX, y - sampleModelTranslateY,
- w, h, iArray, dataBuffer);
- }
-
- /**
- * Sets the sample values for the pixels in the region specified by
- * (x, y, w, h) in the raster. The array is ordered by pixels (that is, all
- * the samples for the first pixel are grouped together, followed by all the
- * samples for the second pixel, and so on).
- *
- * @param x the x-coordinate of the top-left pixel.
- * @param y the y-coordinate of the top-left pixel.
- * @param w the width of the region of pixels.
- * @param h the height of the region of pixels.
- * @param fArray the pixel sample values (<code>null</code> not permitted).
- *
- * @throws NullPointerException if <code>fArray</code> is <code>null</code>.
- */
- public void setPixels(int x, int y, int w, int h, float[] fArray)
- {
- sampleModel.setPixels(x - sampleModelTranslateX, y - sampleModelTranslateY,
- w, h, fArray, dataBuffer);
- }
-
- /**
- * Sets the sample values for the pixels in the region specified by
- * (x, y, w, h) in the raster. The array is ordered by pixels (that is, all
- * the samples for the first pixel are grouped together, followed by all the
- * samples for the second pixel, and so on).
- *
- * @param x the x-coordinate of the top-left pixel.
- * @param y the y-coordinate of the top-left pixel.
- * @param w the width of the region of pixels.
- * @param h the height of the region of pixels.
- * @param dArray the pixel sample values (<code>null</code> not permitted).
- *
- * @throws NullPointerException if <code>dArray</code> is <code>null</code>.
- */
- public void setPixels(int x, int y, int w, int h, double[] dArray)
- {
- sampleModel.setPixels(x - sampleModelTranslateX, y - sampleModelTranslateY,
- w, h, dArray, dataBuffer);
- }
-
- /**
- * Sets the sample value for a band for the pixel at (x, y) in the raster.
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param b the band (in the range <code>0</code> to
- * <code>getNumBands() - 1</code>).
- * @param s the sample value.
- */
- public void setSample(int x, int y, int b, int s)
- {
- sampleModel.setSample(x - sampleModelTranslateX, y - sampleModelTranslateY,
- b, s, dataBuffer);
- }
-
- /**
- * Sets the sample value for a band for the pixel at (x, y) in the raster.
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param b the band (in the range <code>0</code> to
- * <code>getNumBands() - 1</code>).
- * @param s the sample value.
- */
- public void setSample(int x, int y, int b, float s)
- {
- sampleModel.setSample(x - sampleModelTranslateX, y - sampleModelTranslateY,
- b, s, dataBuffer);
- }
-
- /**
- * Sets the sample value for a band for the pixel at (x, y) in the raster.
- *
- * @param x the x-coordinate of the pixel.
- * @param y the y-coordinate of the pixel.
- * @param b the band (in the range <code>0</code> to
- * <code>getNumBands() - 1</code>).
- * @param s the sample value.
- */
- public void setSample(int x, int y, int b, double s)
- {
- sampleModel.setSample(x - sampleModelTranslateX, y - sampleModelTranslateY,
- b, s, dataBuffer);
- }
-
- /**
- * Sets the sample values for one band for the pixels in the region
- * specified by (x, y, w, h) in the raster.
- *
- * @param x the x-coordinate of the top-left pixel.
- * @param y the y-coordinate of the top-left pixel.
- * @param w the width of the region of pixels.
- * @param h the height of the region of pixels.
- * @param b the band (in the range <code>0</code> to
- * </code>getNumBands() - 1</code>).
- * @param iArray the sample values (<code>null</code> not permitted).
- *
- * @throws NullPointerException if <code>iArray</code> is <code>null</code>.
- */
- public void setSamples(int x, int y, int w, int h, int b,
- int[] iArray)
- {
- sampleModel.setSamples(x - sampleModelTranslateX, y - sampleModelTranslateY,
- w, h, b, iArray, dataBuffer);
- }
-
- /**
- * Sets the sample values for one band for the pixels in the region
- * specified by (x, y, w, h) in the raster.
- *
- * @param x the x-coordinate of the top-left pixel.
- * @param y the y-coordinate of the top-left pixel.
- * @param w the width of the region of pixels.
- * @param h the height of the region of pixels.
- * @param b the band (in the range <code>0</code> to
- * </code>getNumBands() - 1</code>).
- * @param fArray the sample values (<code>null</code> not permitted).
- *
- * @throws NullPointerException if <code>fArray</code> is <code>null</code>.
- */
- public void setSamples(int x, int y, int w, int h, int b,
- float[] fArray)
- {
- sampleModel.setSamples(x - sampleModelTranslateX, y - sampleModelTranslateY,
- w, h, b, fArray, dataBuffer);
- }
-
- /**
- * Sets the sample values for one band for the pixels in the region
- * specified by (x, y, w, h) in the raster.
- *
- * @param x the x-coordinate of the top-left pixel.
- * @param y the y-coordinate of the top-left pixel.
- * @param w the width of the region of pixels.
- * @param h the height of the region of pixels.
- * @param b the band (in the range <code>0</code> to
- * </code>getNumBands() - 1</code>).
- * @param dArray the sample values (<code>null</code> not permitted).
- *
- * @throws NullPointerException if <code>dArray</code> is <code>null</code>.
- */
- public void setSamples(int x, int y, int w, int h, int b,
- double[] dArray)
- {
- sampleModel.setSamples(x - sampleModelTranslateX, y - sampleModelTranslateY,
- w, h, b, dArray, dataBuffer);
- }
-}
diff --git a/libjava/classpath/java/awt/image/WritableRenderedImage.java b/libjava/classpath/java/awt/image/WritableRenderedImage.java
deleted file mode 100644
index 9142fe0..0000000
--- a/libjava/classpath/java/awt/image/WritableRenderedImage.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/* WritableRenderedImage.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image;
-
-import java.awt.Point;
-
-/**
- * NEEDS DOCUMENTATION
- */
-public interface WritableRenderedImage extends RenderedImage
-{
- void addTileObserver(TileObserver to);
- void removeTileObserver(TileObserver to);
- WritableRaster getWritableTile(int x, int y);
- void releaseWritableTile(int x, int y);
- boolean isTileWritable(int x, int y);
- Point[] getWritableTileIndices();
- boolean hasTileWriters();
- void setData(Raster r);
-} // interface WritableRenderedImage
diff --git a/libjava/classpath/java/awt/image/package.html b/libjava/classpath/java/awt/image/package.html
deleted file mode 100644
index 50fa99d..0000000
--- a/libjava/classpath/java/awt/image/package.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!-- package.html - describes classes in java.awt.image package.
- Copyright (C) 2002 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. -->
-
-<html>
-<head><title>GNU Classpath - java.awt.image</title></head>
-
-<body>
-<p>Image consumers, producers and filters.</p>
-
-</body>
-</html>
diff --git a/libjava/classpath/java/awt/image/renderable/ContextualRenderedImageFactory.java b/libjava/classpath/java/awt/image/renderable/ContextualRenderedImageFactory.java
deleted file mode 100644
index 8852bef..0000000
--- a/libjava/classpath/java/awt/image/renderable/ContextualRenderedImageFactory.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/* ContextualRenderedImageFactory.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image.renderable;
-
-import java.awt.geom.Rectangle2D;
-import java.awt.image.RenderedImage;
-
-/**
- * STUBBED
- */
-public interface ContextualRenderedImageFactory extends RenderedImageFactory
-{
- RenderContext mapRenderContext(int i, RenderContext context,
- ParameterBlock block, RenderableImage image);
- RenderedImage create(RenderContext context, ParameterBlock block);
- Rectangle2D getBounds2D(ParameterBlock block);
- Object getProperty(ParameterBlock block, String name);
- String[] getPropertyNames();
- boolean isDynamic();
-} // interface ContextualRenderedImageFactory
diff --git a/libjava/classpath/java/awt/image/renderable/ParameterBlock.java b/libjava/classpath/java/awt/image/renderable/ParameterBlock.java
deleted file mode 100644
index f380778..0000000
--- a/libjava/classpath/java/awt/image/renderable/ParameterBlock.java
+++ /dev/null
@@ -1,308 +0,0 @@
-/* ParameterBlock.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image.renderable;
-
-import java.awt.image.RenderedImage;
-import java.io.Serializable;
-import java.util.Vector;
-
-public class ParameterBlock implements Cloneable, Serializable
-{
- private static final long serialVersionUID = -7577115551785240750L;
- protected Vector<Object> sources;
- protected Vector<Object> parameters;
-
- public ParameterBlock()
- {
- this(new Vector<Object>(), new Vector<Object>());
- }
-
- public ParameterBlock(Vector<Object> sources)
- {
- this(sources, new Vector<Object>());
- }
-
- public ParameterBlock(Vector<Object> sources, Vector<Object> parameters)
- {
- this.sources = sources;
- this.parameters = parameters;
- }
-
- public Object shallowClone()
- {
- try
- {
- return super.clone();
- }
- catch (CloneNotSupportedException e)
- {
- throw (Error) new InternalError().initCause(e); // impossible
- }
- }
-
- public Object clone()
- {
- ParameterBlock pb = (ParameterBlock) shallowClone();
- if (sources != null)
- pb.sources = (Vector<Object>) sources.clone();
- if (parameters != null)
- pb.parameters = (Vector<Object>) parameters.clone();
- return pb;
- }
-
- public ParameterBlock addSource(Object source)
- {
- sources.add(source);
- return this;
- }
-
- public Object getSource(int index)
- {
- return sources.get(index);
- }
-
- public ParameterBlock setSource(Object source, int index)
- {
- sources.ensureCapacity(index);
- sources.set(index, source);
- return this;
- }
-
- public RenderedImage getRenderedSource(int index)
- {
- return (RenderedImage) sources.get(index);
- }
-
- public RenderableImage getRenderableSource(int index)
- {
- return (RenderableImage) sources.get(index);
- }
-
- public int getNumSources()
- {
- return sources.size();
- }
-
- public Vector<Object> getSources()
- {
- return sources;
- }
-
- public void setSources(Vector<Object> sources)
- {
- this.sources = sources;
- }
-
- public void removeSources()
- {
- if (sources != null)
- sources.clear();
- }
-
- public int getNumParameters()
- {
- return parameters.size();
- }
-
- public Vector<Object> getParameters()
- {
- return parameters;
- }
-
- public void setParameters(Vector<Object> parameters)
- {
- this.parameters = parameters;
- }
-
- public void removeParameters()
- {
- if (parameters != null)
- parameters.clear();
- }
-
- public ParameterBlock add(Object o)
- {
- parameters.add(o);
- return this;
- }
-
- public ParameterBlock add(byte b)
- {
- return add(new Byte(b));
- }
-
- public ParameterBlock add(char c)
- {
- return add(new Character(c));
- }
-
- public ParameterBlock add(short s)
- {
- return add(new Short(s));
- }
-
- public ParameterBlock add(int i)
- {
- return add(new Integer(i));
- }
-
- public ParameterBlock add(long l)
- {
- return add(new Long(l));
- }
-
- public ParameterBlock add(float f)
- {
- return add(new Float(f));
- }
-
- public ParameterBlock add(double d)
- {
- return add(new Double(d));
- }
-
- public ParameterBlock set(Object o, int index)
- {
- parameters.ensureCapacity(index);
- parameters.set(index, o);
- return this;
- }
-
- public ParameterBlock set(byte b, int index)
- {
- return set(new Byte(b), index);
- }
-
- public ParameterBlock set(char c, int index)
- {
- return set(new Character(c), index);
- }
-
- public ParameterBlock set(short s, int index)
- {
- return set(new Short(s), index);
- }
-
- public ParameterBlock set(int i, int index)
- {
- return set(new Integer(i), index);
- }
-
- public ParameterBlock set(long l, int index)
- {
- return set(new Long(l), index);
- }
-
- public ParameterBlock set(float f, int index)
- {
- return set(new Float(f), index);
- }
-
- public ParameterBlock set(double d, int index)
- {
- return set(new Double(d), index);
- }
-
- public Object getObjectParameter(int index)
- {
- return parameters.get(index);
- }
-
- public byte getByteParameter(int index)
- {
- return ((Byte) parameters.get(index)).byteValue();
- }
-
- public char getCharParameter(int index)
- {
- return ((Character) parameters.get(index)).charValue();
- }
-
- public short getShortParameter(int index)
- {
- return ((Short) parameters.get(index)).shortValue();
- }
-
- public int getIntParameter(int index)
- {
- return ((Integer) parameters.get(index)).intValue();
- }
-
- public long getLongParameter(int index)
- {
- return ((Long) parameters.get(index)).longValue();
- }
-
- public float getFloatParameter(int index)
- {
- return ((Float) parameters.get(index)).floatValue();
- }
-
- public double getDoubleParameter(int index)
- {
- return ((Double) parameters.get(index)).doubleValue();
- }
-
- public Class[] getParamClasses()
- {
- int i = parameters.size();
- Class[] result = new Class[i];
- while (--i >= 0)
- {
- Class c = parameters.get(i).getClass();
- if (c == Byte.class)
- result[i] = byte.class;
- else if (c == Character.class)
- result[i] = char.class;
- else if (c == Short.class)
- result[i] = short.class;
- else if (c == Integer.class)
- result[i] = int.class;
- else if (c == Long.class)
- result[i] = long.class;
- else if (c == Float.class)
- result[i] = float.class;
- else if (c == Double.class)
- result[i] = double.class;
- else
- result[i] = c;
- }
- return result;
- }
-} // class ParameterBlock
diff --git a/libjava/classpath/java/awt/image/renderable/RenderContext.java b/libjava/classpath/java/awt/image/renderable/RenderContext.java
deleted file mode 100644
index 8017c1a..0000000
--- a/libjava/classpath/java/awt/image/renderable/RenderContext.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/* RenderContext.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image.renderable;
-
-import java.awt.RenderingHints;
-import java.awt.Shape;
-import java.awt.geom.AffineTransform;
-
-public class RenderContext implements Cloneable
-{
- private AffineTransform xform;
- private Shape aoi;
- private RenderingHints hints;
-
- public RenderContext(AffineTransform xform, Shape aoi, RenderingHints hints)
- {
- this.xform = xform;
- this.aoi = aoi;
- this.hints = hints;
- }
-
- public RenderContext(AffineTransform xform)
- {
- this(xform, null, null);
- }
-
- public RenderContext(AffineTransform xform, RenderingHints hints)
- {
- this(xform, null, hints);
- }
-
- public RenderContext(AffineTransform xform, Shape aoi)
- {
- this(xform, aoi, null);
- }
-
- public RenderingHints getRenderingHints()
- {
- return hints;
- }
-
- public void setRenderingHints(RenderingHints hints)
- {
- this.hints = hints;
- }
-
- public void setTransform(AffineTransform xform)
- {
- this.xform = xform;
- }
-
- public void preConcatenateTransform(AffineTransform pre)
- {
- preConcetenateTransform (pre);
- }
-
- /** @deprecated */
- public void preConcetenateTransform(AffineTransform pre)
- {
- xform.preConcatenate (pre);
- }
-
- public void concatenateTransform(AffineTransform post)
- {
- concetenateTransform (post);
- }
-
- /** @deprecated */
- public void concetenateTransform(AffineTransform post)
- {
- xform.concatenate (post);
- }
-
- public AffineTransform getTransform()
- {
- return xform;
- }
-
- public void setAreaOfInterest(Shape aoi)
- {
- this.aoi = aoi;
- }
-
- public Shape getAreaOfInterest()
- {
- return aoi;
- }
-
- public Object clone()
- {
- try
- {
- RenderContext copy = (RenderContext) super.clone();
- if (xform != null)
- copy.xform = (AffineTransform) xform.clone();
- if (hints != null)
- copy.hints = (RenderingHints) hints.clone();
- return copy;
- }
- catch (CloneNotSupportedException e)
- {
- throw (Error) new InternalError().initCause(e); // impossible
- }
- }
-} // class RenderContext
diff --git a/libjava/classpath/java/awt/image/renderable/RenderableImage.java b/libjava/classpath/java/awt/image/renderable/RenderableImage.java
deleted file mode 100644
index 31767af..0000000
--- a/libjava/classpath/java/awt/image/renderable/RenderableImage.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/* RenderableImage.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image.renderable;
-
-import java.awt.RenderingHints;
-import java.awt.image.RenderedImage;
-import java.util.Vector;
-
-public interface RenderableImage
-{
- String HINTS_OBSERVED = "HINTS_OBSERVED";
-
- Vector<RenderableImage> getSources();
- Object getProperty(String name);
- String[] getPropertyNames();
- boolean isDynamic();
- float getWidth();
- float getHeight();
- float getMinX();
- float getMinY();
- RenderedImage createScaledRendering(int w, int h, RenderingHints hints);
- RenderedImage createDefaultRendering();
- RenderedImage createRendering(RenderContext context);
-
-} // interface RenderableImage
diff --git a/libjava/classpath/java/awt/image/renderable/RenderableImageOp.java b/libjava/classpath/java/awt/image/renderable/RenderableImageOp.java
deleted file mode 100644
index 81e537c..0000000
--- a/libjava/classpath/java/awt/image/renderable/RenderableImageOp.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/* RenderableImageOp.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image.renderable;
-
-import java.awt.RenderingHints;
-import java.awt.geom.AffineTransform;
-import java.awt.image.RenderedImage;
-import java.util.Vector;
-
-public class RenderableImageOp implements RenderableImage
-{
- private final ContextualRenderedImageFactory crif;
- private ParameterBlock block;
-
- public RenderableImageOp(ContextualRenderedImageFactory crif,
- ParameterBlock block)
- {
- this.crif = crif;
- this.block = (ParameterBlock) block.clone();
- }
-
- public Vector<RenderableImage> getSources()
- {
- if (block.sources == null)
- return null;
- int size = block.sources.size();
- Vector v = new Vector();
- for (int i = 0; i < size; i++)
- {
- Object o = block.sources.get(i);
- if (o instanceof RenderableImage)
- v.add(o);
- }
- return v;
- }
-
- public Object getProperty(String name)
- {
- return crif.getProperty(block, name);
- }
-
- public String[] getPropertyNames()
- {
- return crif.getPropertyNames();
- }
-
- public boolean isDynamic()
- {
- return crif.isDynamic();
- }
-
- public float getWidth()
- {
- return (float) crif.getBounds2D(block).getWidth();
- }
-
- public float getHeight()
- {
- return (float) crif.getBounds2D(block).getHeight();
- }
-
- public float getMinX()
- {
- return (float) crif.getBounds2D(block).getX();
- }
-
- public float getMinY()
- {
- return (float) crif.getBounds2D(block).getY();
- }
-
- public ParameterBlock setParameterBlock(ParameterBlock block)
- {
- ParameterBlock result = this.block;
- this.block = (ParameterBlock) block.clone();
- return result;
- }
-
- public ParameterBlock getParameterBlock()
- {
- return block;
- }
-
- public RenderedImage createScaledRendering(int w, int h,
- RenderingHints hints)
- {
- if (w == 0)
- if (h == 0)
- throw new IllegalArgumentException();
- else
- w = Math.round(h * getWidth() / getHeight());
- if (h == 0)
- h = Math.round(w * getHeight() / getWidth());
- AffineTransform xform = AffineTransform.getScaleInstance(w * getWidth(),
- h * getHeight());
- return createRendering(new RenderContext(xform, hints));
- }
-
- public RenderedImage createDefaultRendering()
- {
- return createRendering(new RenderContext(new AffineTransform()));
- }
-
- public RenderedImage createRendering(RenderContext context)
- {
- ParameterBlock copy = (ParameterBlock) block.clone();
- int i = block.sources.size();
- while (--i >= 0)
- {
- Object o = block.sources.get(i);
- if (o instanceof RenderableImage)
- {
- RenderableImage ri = (RenderableImage) o;
- RenderContext rc = crif.mapRenderContext(i, context, block, ri);
- copy.sources.set(i, ri.createRendering(rc));
- }
- }
- // Now copy.sources should be only RenderedImages.
- return crif.create(context, copy);
- }
-} // class RenderableImageOp
diff --git a/libjava/classpath/java/awt/image/renderable/RenderableImageProducer.java b/libjava/classpath/java/awt/image/renderable/RenderableImageProducer.java
deleted file mode 100644
index bd3b507..0000000
--- a/libjava/classpath/java/awt/image/renderable/RenderableImageProducer.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/* RenderableImageProducer.java --
- Copyright (C) 2002, 2006 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image.renderable;
-
-import java.awt.image.ColorModel;
-import java.awt.image.DataBuffer;
-import java.awt.image.ImageConsumer;
-import java.awt.image.ImageProducer;
-import java.awt.image.Raster;
-import java.awt.image.RenderedImage;
-import java.awt.image.SampleModel;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-public class RenderableImageProducer implements ImageProducer, Runnable
-{
- private RenderableImage image;
- private RenderContext context;
- private ArrayList consumers = new ArrayList();
-
- public RenderableImageProducer(RenderableImage image, RenderContext context)
- {
- this.image = image;
- this.context = context;
- }
-
- public void setRenderContext(RenderContext context)
- {
- this.context = context;
- }
-
- public void addConsumer(ImageConsumer consumer)
- {
- synchronized (consumers)
- {
- if (! consumers.contains(consumer))
- consumers.add(consumer);
- }
- }
-
- public boolean isConsumer(ImageConsumer consumer)
- {
- synchronized (consumers)
- {
- return consumers.contains(consumer);
- }
- }
-
- public void removeConsumer(ImageConsumer consumer)
- {
- synchronized (consumers)
- {
- consumers.remove(consumer);
- }
- }
-
- public void startProduction(ImageConsumer consumer)
- {
- addConsumer(consumer);
- Thread t = new Thread(this, "RenderableImageProducerWorker");
- t.start();
- }
-
- public void requestTopDownLeftRightResend(ImageConsumer consumer)
- {
- // Do nothing. The contract says we can ignore this call, so we do.
- }
-
- public void run()
- {
- // This isn't ideal but it avoids fail-fast problems.
- // Alternatively, we could clone 'consumers' here.
- synchronized (consumers)
- {
- RenderedImage newImage;
- if (context == null)
- newImage = image.createDefaultRendering();
- else
- newImage = image.createRendering(context);
- Raster newData = newImage.getData();
- ColorModel colorModel = newImage.getColorModel();
- if (colorModel == null)
- colorModel = ColorModel.getRGBdefault();
- SampleModel sampleModel = newData.getSampleModel();
- DataBuffer dataBuffer = newData.getDataBuffer();
- int width = newData.getWidth();
- int height = newData.getHeight();
-
- // Initialize the consumers.
- Iterator it = consumers.iterator();
- while (it.hasNext())
- {
- ImageConsumer target = (ImageConsumer) it.next();
- target.setHints(ImageConsumer.COMPLETESCANLINES
- | ImageConsumer.SINGLEFRAME
- | ImageConsumer.SINGLEPASS
- | ImageConsumer.TOPDOWNLEFTRIGHT);
- target.setDimensions(width, height);
- }
-
- // Work in scan-line order.
- int[] newLine = new int[width];
- int[] bands = new int[sampleModel.getNumBands()];
- for (int y = 0; y < height; ++y)
- {
- for (int x = 0; x < width; ++x)
- {
- sampleModel.getPixel(x, y, bands, dataBuffer);
- newLine[x] = colorModel.getDataElement(bands, 0);
- }
-
- // Tell the consumers about the new scan line.
- it = consumers.iterator();
- while (it.hasNext())
- {
- ImageConsumer target = (ImageConsumer) it.next();
- target.setPixels(0, y, width, 1, colorModel, newLine, 0, width);
- }
- }
-
- // Tell the consumers that we're done.
- it = consumers.iterator();
- while (it.hasNext())
- {
- ImageConsumer target = (ImageConsumer) it.next();
- target.imageComplete(ImageConsumer.STATICIMAGEDONE);
- }
- }
- }
-} // class RenderableImageProducer
diff --git a/libjava/classpath/java/awt/image/renderable/RenderedImageFactory.java b/libjava/classpath/java/awt/image/renderable/RenderedImageFactory.java
deleted file mode 100644
index ea2bd69..0000000
--- a/libjava/classpath/java/awt/image/renderable/RenderedImageFactory.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/* RenderedImageFactory.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt.image.renderable;
-
-import java.awt.RenderingHints;
-import java.awt.image.RenderedImage;
-
-public interface RenderedImageFactory
-{
- RenderedImage create(ParameterBlock block, RenderingHints hints);
-} // interface RenderedImageFactory
diff --git a/libjava/classpath/java/awt/image/renderable/package.html b/libjava/classpath/java/awt/image/renderable/package.html
deleted file mode 100644
index a24237e..0000000
--- a/libjava/classpath/java/awt/image/renderable/package.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!-- package.html - describes classes in java.awt.image.renderable package.
- Copyright (C) 2002 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. -->
-
-<html>
-<head><title>GNU Classpath - java.awt.image.renderable</title></head>
-
-<body>
-<p></p>
-
-</body>
-</html>