From 07b78716af6a9d7c9fd1e94d9baf94a52c873947 Mon Sep 17 00:00:00 2001 From: Andrew Haley Date: Fri, 30 Sep 2016 16:24:48 +0000 Subject: Makefile.def: Remove libjava. 2016-09-30 Andrew Haley * Makefile.def: Remove libjava. * Makefile.tpl: Likewise. * Makefile.in: Regenerate. * configure.ac: Likewise. * configure: Likewise. * gcc/java: Remove. * libjava: Likewise. From-SVN: r240662 --- .../java/awt/image/AffineTransformOp.java | 608 ------------- .../java/awt/image/AreaAveragingScaleFilter.java | 268 ------ .../classpath/java/awt/image/BandCombineOp.java | 218 ----- .../java/awt/image/BandedSampleModel.java | 759 ---------------- .../classpath/java/awt/image/BufferStrategy.java | 124 --- .../classpath/java/awt/image/BufferedImage.java | 839 ------------------ .../java/awt/image/BufferedImageFilter.java | 110 --- .../classpath/java/awt/image/BufferedImageOp.java | 107 --- .../classpath/java/awt/image/ByteLookupTable.java | 175 ---- .../classpath/java/awt/image/ColorConvertOp.java | 537 ------------ libjava/classpath/java/awt/image/ColorModel.java | 794 ----------------- .../java/awt/image/ComponentColorModel.java | 408 --------- .../java/awt/image/ComponentSampleModel.java | 755 ---------------- libjava/classpath/java/awt/image/ConvolveOp.java | 380 -------- .../classpath/java/awt/image/CropImageFilter.java | 184 ---- libjava/classpath/java/awt/image/DataBuffer.java | 437 --------- .../classpath/java/awt/image/DataBufferByte.java | 245 ------ .../classpath/java/awt/image/DataBufferDouble.java | 288 ------ .../classpath/java/awt/image/DataBufferFloat.java | 286 ------ .../classpath/java/awt/image/DataBufferInt.java | 244 ------ .../classpath/java/awt/image/DataBufferShort.java | 245 ------ .../classpath/java/awt/image/DataBufferUShort.java | 246 ------ .../classpath/java/awt/image/DirectColorModel.java | 435 --------- .../java/awt/image/FilteredImageSource.java | 124 --- .../classpath/java/awt/image/ImageConsumer.java | 216 ----- libjava/classpath/java/awt/image/ImageFilter.java | 226 ----- .../classpath/java/awt/image/ImageObserver.java | 129 --- .../classpath/java/awt/image/ImageProducer.java | 84 -- .../java/awt/image/ImagingOpException.java | 66 -- .../classpath/java/awt/image/IndexColorModel.java | 736 ---------------- libjava/classpath/java/awt/image/Kernel.java | 171 ---- libjava/classpath/java/awt/image/LookupOp.java | 307 ------- libjava/classpath/java/awt/image/LookupTable.java | 109 --- .../java/awt/image/MemoryImageSource.java | 429 --------- .../awt/image/MultiPixelPackedSampleModel.java | 603 ------------- .../classpath/java/awt/image/PackedColorModel.java | 188 ---- libjava/classpath/java/awt/image/PixelGrabber.java | 631 ------------- .../awt/image/PixelInterleavedSampleModel.java | 123 --- .../classpath/java/awt/image/RGBImageFilter.java | 265 ------ libjava/classpath/java/awt/image/Raster.java | 973 -------------------- .../java/awt/image/RasterFormatException.java | 65 -- libjava/classpath/java/awt/image/RasterOp.java | 104 --- .../classpath/java/awt/image/RenderedImage.java | 70 -- .../java/awt/image/ReplicateScaleFilter.java | 257 ------ libjava/classpath/java/awt/image/RescaleOp.java | 385 -------- libjava/classpath/java/awt/image/SampleModel.java | 974 --------------------- .../classpath/java/awt/image/ShortLookupTable.java | 177 ---- .../awt/image/SinglePixelPackedSampleModel.java | 586 ------------- libjava/classpath/java/awt/image/TileObserver.java | 47 - .../classpath/java/awt/image/VolatileImage.java | 253 ------ .../classpath/java/awt/image/WritableRaster.java | 448 ---------- .../java/awt/image/WritableRenderedImage.java | 56 -- libjava/classpath/java/awt/image/package.html | 46 - .../renderable/ContextualRenderedImageFactory.java | 56 -- .../java/awt/image/renderable/ParameterBlock.java | 308 ------- .../java/awt/image/renderable/RenderContext.java | 141 --- .../java/awt/image/renderable/RenderableImage.java | 61 -- .../awt/image/renderable/RenderableImageOp.java | 157 ---- .../image/renderable/RenderableImageProducer.java | 166 ---- .../awt/image/renderable/RenderedImageFactory.java | 47 - .../java/awt/image/renderable/package.html | 46 - 61 files changed, 18522 deletions(-) delete mode 100644 libjava/classpath/java/awt/image/AffineTransformOp.java delete mode 100644 libjava/classpath/java/awt/image/AreaAveragingScaleFilter.java delete mode 100644 libjava/classpath/java/awt/image/BandCombineOp.java delete mode 100644 libjava/classpath/java/awt/image/BandedSampleModel.java delete mode 100644 libjava/classpath/java/awt/image/BufferStrategy.java delete mode 100644 libjava/classpath/java/awt/image/BufferedImage.java delete mode 100644 libjava/classpath/java/awt/image/BufferedImageFilter.java delete mode 100644 libjava/classpath/java/awt/image/BufferedImageOp.java delete mode 100644 libjava/classpath/java/awt/image/ByteLookupTable.java delete mode 100644 libjava/classpath/java/awt/image/ColorConvertOp.java delete mode 100644 libjava/classpath/java/awt/image/ColorModel.java delete mode 100644 libjava/classpath/java/awt/image/ComponentColorModel.java delete mode 100644 libjava/classpath/java/awt/image/ComponentSampleModel.java delete mode 100644 libjava/classpath/java/awt/image/ConvolveOp.java delete mode 100644 libjava/classpath/java/awt/image/CropImageFilter.java delete mode 100644 libjava/classpath/java/awt/image/DataBuffer.java delete mode 100644 libjava/classpath/java/awt/image/DataBufferByte.java delete mode 100644 libjava/classpath/java/awt/image/DataBufferDouble.java delete mode 100644 libjava/classpath/java/awt/image/DataBufferFloat.java delete mode 100644 libjava/classpath/java/awt/image/DataBufferInt.java delete mode 100644 libjava/classpath/java/awt/image/DataBufferShort.java delete mode 100644 libjava/classpath/java/awt/image/DataBufferUShort.java delete mode 100644 libjava/classpath/java/awt/image/DirectColorModel.java delete mode 100644 libjava/classpath/java/awt/image/FilteredImageSource.java delete mode 100644 libjava/classpath/java/awt/image/ImageConsumer.java delete mode 100644 libjava/classpath/java/awt/image/ImageFilter.java delete mode 100644 libjava/classpath/java/awt/image/ImageObserver.java delete mode 100644 libjava/classpath/java/awt/image/ImageProducer.java delete mode 100644 libjava/classpath/java/awt/image/ImagingOpException.java delete mode 100644 libjava/classpath/java/awt/image/IndexColorModel.java delete mode 100644 libjava/classpath/java/awt/image/Kernel.java delete mode 100644 libjava/classpath/java/awt/image/LookupOp.java delete mode 100644 libjava/classpath/java/awt/image/LookupTable.java delete mode 100644 libjava/classpath/java/awt/image/MemoryImageSource.java delete mode 100644 libjava/classpath/java/awt/image/MultiPixelPackedSampleModel.java delete mode 100644 libjava/classpath/java/awt/image/PackedColorModel.java delete mode 100644 libjava/classpath/java/awt/image/PixelGrabber.java delete mode 100644 libjava/classpath/java/awt/image/PixelInterleavedSampleModel.java delete mode 100644 libjava/classpath/java/awt/image/RGBImageFilter.java delete mode 100644 libjava/classpath/java/awt/image/Raster.java delete mode 100644 libjava/classpath/java/awt/image/RasterFormatException.java delete mode 100644 libjava/classpath/java/awt/image/RasterOp.java delete mode 100644 libjava/classpath/java/awt/image/RenderedImage.java delete mode 100644 libjava/classpath/java/awt/image/ReplicateScaleFilter.java delete mode 100644 libjava/classpath/java/awt/image/RescaleOp.java delete mode 100644 libjava/classpath/java/awt/image/SampleModel.java delete mode 100644 libjava/classpath/java/awt/image/ShortLookupTable.java delete mode 100644 libjava/classpath/java/awt/image/SinglePixelPackedSampleModel.java delete mode 100644 libjava/classpath/java/awt/image/TileObserver.java delete mode 100644 libjava/classpath/java/awt/image/VolatileImage.java delete mode 100644 libjava/classpath/java/awt/image/WritableRaster.java delete mode 100644 libjava/classpath/java/awt/image/WritableRenderedImage.java delete mode 100644 libjava/classpath/java/awt/image/package.html delete mode 100644 libjava/classpath/java/awt/image/renderable/ContextualRenderedImageFactory.java delete mode 100644 libjava/classpath/java/awt/image/renderable/ParameterBlock.java delete mode 100644 libjava/classpath/java/awt/image/renderable/RenderContext.java delete mode 100644 libjava/classpath/java/awt/image/renderable/RenderableImage.java delete mode 100644 libjava/classpath/java/awt/image/renderable/RenderableImageOp.java delete mode 100644 libjava/classpath/java/awt/image/renderable/RenderableImageProducer.java delete mode 100644 libjava/classpath/java/awt/image/renderable/RenderedImageFactory.java delete mode 100644 libjava/classpath/java/awt/image/renderable/package.html (limited to 'libjava/classpath/java/awt/image') 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. - *
- * - * @author C. Brian Jones (cbj@gnu.org) - */ -public class AreaAveragingScaleFilter extends ReplicateScaleFilter -{ - /** - * Construct an instance of AreaAveragingScaleFilter which - * should be used in conjunction with a FilteredImageSource - * 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 ImageProducer should call this method with a - * bit mask of hints from any of RANDOMPIXELORDER, - * TOPDOWNLEFTRIGHT, COMPLETESCANLINES, - * SINGLEPASS, SINGLEFRAME from the - * ImageConsumer interface. - *
- * FIXME - more than likely Sun's implementation desires - * TOPDOWNLEFTRIGHT 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 byte 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 ColorModel used to translate the pixels - * @param pixels the array of pixel values - * @param offset the index of the first pixels in the pixels array - * @param scansize the width to use in extracting pixels from the pixels 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 int 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 ColorModel used to translate the pixels - * @param pixels the array of pixel values - * @param offset the index of the first pixels in the pixels array - * @param scansize the width to use in extracting pixels from the pixels 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 BandedSampleModel. - * - * @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 BandedSampleModel. - * - * @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 SampleModel 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 w or h is - * not greater than zero. - * @throws IllegalArgumentException if w * h exceeds - * Integer.MAX_VALUE. - */ - 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 - * obj. - * @param y The y-coordinate of the pixel rectangle to store in - * obj. - * @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 (x, y) - * 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 null, a new - * array is created. - * @param data the data buffer (null 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 - * iArray. - * @param y The y-coordinate of the pixel rectangle to store in - * iArray. - * @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 0 to - * getNumBands() - 1). - * @param data the data buffer (null not permitted). - * - * @return The sample value. - * - * @throws NullPointerException if data is null. - */ - 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 0 to - * getNumBands() - 1). - * @param data the data buffer (null not permitted). - * - * @return The sample value. - * - * @throws NullPointerException if data is null. - * - * @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 0 to - * getNumBands() - 1). - * @param data the data buffer (null not permitted). - * - * @return The sample value. - * - * @throws NullPointerException if data is null. - * - * @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 - * iArray. - * @param y The y-coordinate of the pixel rectangle to store in - * iArray. - * @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 obj. - * @param y The y-coordinate of the data elements in obj. - * @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 (null not permitted). - * @param data the data buffer (null not permitted). - * - * @throws NullPointerException if either iArray or - * data is null. - */ - 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 (null not permitted). - * @param data the data buffer (null not permitted). - * - * @throws NullPointerException if either iArray or - * data is null. - */ - 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 b of the pixel at location - * (x, y) 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 (null 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 0 to - * getNumBands() - 1). - * @param s the sample value. - * @param data the data buffer (null not permitted). - * - * @throws NullPointerException if data is null. - */ - 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 0 to - * getNumBands() - 1). - * @param s the sample value. - * @param data the data buffer (null not permitted). - * - * @throws NullPointerException if data is null. - */ - 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 0 to - * getNumBands() - 1). - * @param iArray the sample values (null not permitted). - * @param data the data buffer (null not permitted). - * - * @throws NullPointerException if either iArray or - * data is null. - */ - 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 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 BufferedImage with the specified width, height - * and type. Valid type values are: - * - *
    - *
  • {@link #TYPE_INT_RGB}
  • - *
  • {@link #TYPE_INT_ARGB}
  • - *
  • {@link #TYPE_INT_ARGB_PRE}
  • - *
  • {@link #TYPE_INT_BGR}
  • - *
  • {@link #TYPE_3BYTE_BGR}
  • - *
  • {@link #TYPE_4BYTE_ABGR}
  • - *
  • {@link #TYPE_4BYTE_ABGR_PRE}
  • - *
  • {@link #TYPE_USHORT_565_RGB}
  • - *
  • {@link #TYPE_USHORT_555_RGB}
  • - *
  • {@link #TYPE_BYTE_GRAY}
  • - *
  • {@link #TYPE_USHORT_GRAY}
  • - *
  • {@link #TYPE_BYTE_BINARY}
  • - *
  • {@link #TYPE_BYTE_INDEXED}
  • - *
- * - * @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 width or - * height is less than or equal to zero. - * @throws IllegalArgumentException if type 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 true, 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 (null not permitted). - * - * @return The property value. - * - * @throws NullPointerException if string is null. - */ - 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 null always. - * - * @return null 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 consumers = new Vector(); - - 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 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; yBufferedImage (the - * source) producing a new BufferedImage (the destination). - */ -public interface BufferedImageOp -{ - /** - * Performs an operation on the source image, returning the result in a - * BufferedImage. If dest is null, a - * new BufferedImage will be created by calling the - * {@link #createCompatibleDestImage} method. If dest - * is not null, the result is written to dest then - * returned (this avoids creating a new BufferedImage each - * time this method is called). - * - * @param src the source image. - * @param dst the destination image (null permitted). - * - * @return The filterd image. - */ - BufferedImage filter(BufferedImage src, BufferedImage dst); - - /** - * Returns the bounds of the destination image on the basis of this - * BufferedImageOp being applied to the specified source image. - * - * @param src the source image. - * - * @return The destination bounds. - */ - Rectangle2D getBounds2D(BufferedImage src); - - /** - * Returns a new BufferedImage that can be used by this - * BufferedImageOp 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 (null 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 ByteLookupTable 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 (null not permitted). - * @exception IllegalArgumentException if offset < 0 or data.length < 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 ByteLookupTable 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 (null not - * permitted). - * @exception IllegalArgumentException if offset < 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: - * - *
    - *
  • normalized: component samples are in range [0.0, 1.0].
  • - * - *
  • color model pixel value: all the color component samples for a - * sigle pixel packed/encoded in a way natural for the color - * model.
  • - * - *
  • color model pixel int value: only makes sense if the natural - * encoding of a single pixel can fit in a single int value.
  • - * - *
  • 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.
  • - * - *
  • sRGB pixel int value: a pixel in sRGB color space, encoded in - * default 0xAARRGGBB format, assumed not alpha premultiplied.
  • - * - *
  • single [0, 255] scaled int samples from default sRGB color - * space. These are always assumed to be alpha non-premultiplied.
  • - * - *
  • 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.
  • - * - *
- * - * @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 getRGBdefault 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 DirectColorModel. - */ - 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. - * - *

This method performs the inverse function of - * getDataElements(int rgb, Object pixel). - * I.e. (rgb == cm.getRGB(cm.getDataElements(rgb, - * null))). - * - * @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. - * - *

This method performs the inverse function of - * getRGB(Object inData). - * - * Outline of conversion process: - * - *

    - * - *
  1. Convert rgb to normalized [0.0, 1.0] sRGB values.
  2. - * - *
  3. Convert to color space components using fromRGB in - * ColorSpace.
  4. - * - *
  5. If color model has alpha and should be premultiplied, - * multiply color space components with alpha value
  6. - * - *
  7. Scale the components to the correct number of bits.
  8. - * - *
  9. Arrange the components in the output array
  10. - * - *
- * - * @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; igetComponents(int pixel, int[] components, - * int offset). I.e. - * - * (pixel == cm.getDataElement(cm.getComponents(pixel, null, - * 0), 0)). - * - * 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; i1) 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= 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; i1) 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; i1) 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; iSampleModel whose arrangement of pixel - * data is compatible to this ColorModel. - * - * @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}. - *

- * Note that the bandOffsets 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 (null - * not permitted). - * - * @throws IllegalArgumentException if dataType is not one of - * the specified values. - * @throws IllegalArgumentException if w is less than or equal - * to zero. - * @throws IllegalArgumentException if h is less than or equal - * to zero. - * @throws IllegalArgumentException if w * h exceeds - * {@link Integer#MAX_VALUE}. - * @throws IllegalArgumentException if pixelStride is negative. - * @throws IllegalArgumentException if scanlineStride is less - * than or equal to zero. - * @throws IllegalArgumentException if bandOffsets 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 - * (null 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 (null - * 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 dataType is not one of - * the specified values. - * @throws IllegalArgumentException if w is less than or equal - * to zero. - * @throws IllegalArgumentException if h is less than or equal - * to zero. - * @throws IllegalArgumentException if w * h exceeds - * {@link Integer#MAX_VALUE}. - * @throws IllegalArgumentException if pixelStride is negative. - * @throws IllegalArgumentException if scanlineStride is less - * than or equal to zero. - * @throws IllegalArgumentException if bandOffsets 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 (null 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 - * (x, y). 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 b for the pixel at - * location (x, y). 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 (x, y) in - * a primitive array (the array type is determined by the data type for - * this model). The obj argument provides an option to supply - * an existing array to hold the result, if this is null a new - * array will be allocated. - * - * @param x the x-coordinate. - * @param y the y-coordinate. - * @param obj a primitive array that, if not null, will be - * used to store and return the sample values. - * @param data the data buffer (null 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 (x, y) - * 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 null, a new - * array is created. - * @param data the data buffer (null 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-null will be populated - * with the sample values and returned as the result. - * @param data the data buffer (null 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 b of the pixel at - * (x, y) 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 (null not permitted). - * - * @return The sample value. - * - * @throws ArrayIndexOutOfBoundsException if (x, y) is outside - * the bounds [0, 0, width, height]. - * - * @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 (x, y) 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 (null 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 (x, y) - * stored in the specified data buffer. - * - * @param x the x-coordinate. - * @param y the y-coordinate. - * @param iArray the pixel sample values (null not permitted). - * @param data the data buffer (null 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 b of the pixel at location - * (x, y) 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 (null 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 - * true if and only if: - *

    - *
  • obj is not null;
  • - *
  • obj is an instance of ComponentSampleModel; - *
  • - *
  • both models have the same values for the dataType, - * width, height, pixelStride, - * scanlineStride, bandOffsets and - * bankIndices fields.
  • - *
- * - * @param obj the object to test (null permitted). - * - * @return true if this sample model is equal to - * obj, and false 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 edgeOp is EDGE_ZERO_FILL) or the - * corresponding pixel values from the source raster (if edgeOp - * is EDGE_NO_OP). 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 CropImageFilter 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 ImageProducer 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 ImageProducer can set a list of properties - * associated with this image by using this method. - *
- * FIXME - What property is set for this class? - * - * @param props the list of properties associated with this image - */ - public void setProperties(Hashtable props) - { - Hashtable prop2 = (Hashtable) 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 byte 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 ColorModel used to translate the pixels - * @param pixels the array of pixel values - * @param offset the index of the first pixels in the pixels array - * @param scansize the width to use in extracting pixels from the pixels 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 int 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 ColorModel used to translate the pixels - * @param pixels the array of pixel values - * @param offset the index of the first pixels in the pixels array - * @param scansize the width to use in extracting pixels from the pixels 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 byte primitives - * as the storage unit. - */ - public static final int TYPE_BYTE = 0; - - /** - * A constant representing a data type that uses short - * primitives as the storage unit. - */ - public static final int TYPE_USHORT = 1; - - /** - * A constant representing a data type that uses short - * primitives as the storage unit. - */ - public static final int TYPE_SHORT = 2; - - /** - * A constant representing a data type that uses int - * primitives as the storage unit. - */ - public static final int TYPE_INT = 3; - - /** - * A constant representing a data type that uses float - * primitives as the storage unit. - */ - public static final int TYPE_FLOAT = 4; - - /** - * A constant representing a data type that uses double - * 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 DataBuffer with the specified data type and - * size. The dataType 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}. - *

- * 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 DataBuffer with the specified data type, - * size and number of banks. The dataType 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}. - *

- * 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 DataBuffer with the specified data type, - * size and number of banks. An offset (which applies to all banks) is - * also specified. The dataType 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}. - *

- * 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 DataBuffer with the specified data type, - * size and number of banks. An offset (which applies to all banks) is - * also specified. The dataType 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}. - *

- * 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 - * numBanks != offsets.length. - */ - 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 dataType < 0 or - * dataType > TYPE_DOUBLE. - */ - 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 - * DataBuffer. - * - * @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 DataBuffer. - * @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 i 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 i 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 i 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 i 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 - * float. The offset (specified in the constructor) is added - * to i 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 - * float. The offset (specified in the constructor) is - * added to i 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 i 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 i 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 - * double. The offset (specified in the constructor) is added - * to i 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 - * double. The offset (specified in the constructor) is - * added to i 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 i 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 i 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 byte 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 byte 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 byte 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. - *

- * Note: there is no exception when dataArray is - * null, 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. - *

- * Note: there is no exception when dataArray is - * null, 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 dataArray is - * null. - */ - 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 dataArray is - * null. - */ - 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 DataBuffer. - * - * @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 i 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 i 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 i 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 i 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 double 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 double 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 double 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. - *

- * Note: there is no exception when dataArray is - * null, 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. - *

- * Note: there is no exception when dataArray is - * null, 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 dataArray is - * null. - */ - 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 dataArray is - * null. - */ - 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 DataBuffer. - * - * @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 i 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 i 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 i 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 i 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 float 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 float 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 float 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. - *

- * Note: there is no exception when dataArray is - * null, 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. - *

- * Note: there is no exception when dataArray is - * null, 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 dataArray is - * null. - */ - 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 dataArray is - * null. - */ - 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 DataBuffer. - * - * @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 i 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 i 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 i 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 i 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 int 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 int 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 int 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. - *

- * Note: there is no exception when dataArray is - * null, 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. - *

- * Note: there is no exception when dataArray is - * null, 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 dataArray is - * null. - */ - 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 dataArray is - * null. - */ - 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 DataBuffer. - * - * @return The data banks. - */ - public int[][] getBankData() - { - return bankData; - } - - /** - * Returns an element from the first data bank. The offset 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 offset - * 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 i 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 i 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 short 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 short 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 short 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. - *

- * Note: there is no exception when dataArray is - * null, 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. - *

- * Note: there is no exception when dataArray is - * null, 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 dataArray is - * null. - */ - 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 dataArray is - * null. - */ - 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 DataBuffer. - * - * @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 i 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 i 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 i 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 i 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 short 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 short 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 short 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 dataArray is - * null. - */ - 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 dataArray is - * null. - */ - 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 DataBuffer. - * - * @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 i 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 i 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 i 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 i 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. - *
- */ - public final int getRed(int pixel) - { - return extractAndNormalizeSample(pixel, 0); - } - - /** - * Get the green component of the given pixel. - *
- */ - public final int getGreen(int pixel) - { - return extractAndNormalizeSample(pixel, 1); - } - - /** - * Get the blue component of the given pixel. - *
- */ - public final int getBlue(int pixel) - { - return extractAndNormalizeSample(pixel, 2); - } - - /** - * Get the alpha component of the given pixel. - *
- */ - 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. - *
- * - * @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. - * - *

This method performs the inverse function of - * getRGB(Object inData). - * - * @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>> shifts[b]; - - return components; - } - - public final int[] getComponents(Object pixel, int[] components, - int offset) - { - return getComponents(getPixelFromArray(pixel), components, offset); - } - - /** - * Creates a WriteableRaster that has a SampleModel - * that is compatible with this ColorModel. - * - * @param w the width of the writeable raster to create - * @param h the height of the writeable raster to create - * - * @throws IllegalArgumentException if w or h - * 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; cImageProducer. By default the setColorModel - * method of the consumer is called with the specified model. - * - * @param model the color model to be used most often by setPixels - * - * @see ColorModel - */ - public void setColorModel(ColorModel model) - { - consumer.setColorModel(model); - } - - /** - * The ImageProducer should call this method with a - * bit mask of hints from any of RANDOMPIXELORDER, - * TOPDOWNLEFTRIGHT, COMPLETESCANLINES, - * SINGLEPASS, SINGLEFRAME from the - * ImageConsumer 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 byte 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 ColorModel used to translate the pixels - * @param pixels the array of pixel values - * @param offset the index of the first pixels in the pixels array - * @param scansize the width to use in extracting pixels from the pixels 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 int 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 ColorModel used to translate the pixels - * @param pixels the array of pixel values - * @param offset the index of the first pixels in the pixels array - * @param scansize the width to use in extracting pixels from the pixels 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 ImageProducer 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 ImageObserver interface can - * receive updates on image construction from an - * ImageProducer asynchronously. - * - * @see ImageProducer - * @author C. Brian Jones (cbj@gnu.org) - */ -public interface ImageObserver -{ - /** - * The width of the image has been provided as the - * width argument to imageUpdate. - * - * @see #imageUpdate - */ - int WIDTH = 1; - - /** - * The height of the image has been provided as the - * height argument to imageUpdate. - * - * @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 ImageProducer interface can - * produce data for images. Each image has a corresponding - * ImageProducer 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 ImageConsumer with this - * ImageProducer. - */ - void addConsumer(ImageConsumer ic); - - /** - * Used to determine if the given ImageConsumer is - * already registered with this ImageProducer. - */ - boolean isConsumer(ImageConsumer ic); - - /** - * Used to remove an ImageConsumer from the list of - * registered consumers for this ImageProducer. - */ - void removeConsumer(ImageConsumer ic); - - /** - * Used to register an ImageConsumer with this - * ImageProducer and then immediately start - * reconstruction of the image data to be delivered to all - * registered consumers. - */ - void startProduction(ImageConsumer ic); - - /** - * Used to register an ImageConsumer with this - * ImageProducer 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 BufferedImageOp or - * RasterOp 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. - *

- * 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. - *

- * The IndexColorModel 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. - *

- * 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. - *

- * IndexColorModel 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 size color elements - * with no alpha component. Each array must contain at least - * size 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 size - * 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 bits < 1 or - * bits > 16. - * @throws NullPointerException if any of the arrays is null. - * @throws ArrayIndexOutOfBoundsException if size 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 size color elements. - * Each array must contain at least size 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 size - * 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 bits < 1 or - * bits > 16. - * @throws NullPointerException if any of the arrays is null. - * @throws ArrayIndexOutOfBoundsException if size 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 size color elements - * including alpha. Each array must contain at least size - * 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 size - * 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 (null - * permitted). - * - * @throws IllegalArgumentException if bits < 1 or - * bits > 16. - * @throws NullPointerException if reds, greens or - * blues is null. - * @throws ArrayIndexOutOfBoundsException if size 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 - * cmap. If hasAlpha is true then - * cmap contains an alpha component after each of the red, green - * and blue components. - * - * @param bits the number of bits needed to represent size - * 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 cmap - * @param hasAlpha cmap has alpha values - * @throws IllegalArgumentException if bits < 1, bits > 16, or size - * < 1. - * @throws NullPointerException if cmap is null. - */ - 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 size - * 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 cmap - * @param hasAlpha cmap has alpha values - * @param trans the index of the transparent color - * @throws IllegalArgumentException if bits < 1, bits > 16, or size - * < 1. - * @throws NullPointerException if cmap is null. - */ - 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 size 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 size - * 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 cmap - * @param hasAlpha cmap 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 < 1, bits > 16, or size - * < 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, - 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. - *

- * 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. - *

- * 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 size - * 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 cmap. - * @param transferType {@link DataBuffer#TYPE_BYTE} or - * {@link DataBuffer#TYPE_USHORT}. - * @param validBits a map of the valid entries in cmap. - * @throws IllegalArgumentException if bits < 1, bits > 16, or size - * < 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 r is null. - * @throws ArrayIndexOutOfBoundsException if r 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 g is null. - * @throws ArrayIndexOutOfBoundsException if g 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 b is null. - * @throws ArrayIndexOutOfBoundsException if b 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 a is null. - * @throws ArrayIndexOutOfBoundsException if a 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 pixel 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 pixel 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 pixel 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 pixel 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 pixel 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 true if the lookup table contains valid data for - * pixel, and false otherwise. - * - * @param pixel the pixel value used to index the color lookup table. - * @return true if pixel is valid, - * false otherwise. - */ - public boolean isValid(int pixel) - { - if (pixel >= 0) - return validBits.testBit(pixel); - return false; - } - - /** - * Return true if all pixels are valid, false - * otherwise. - * - * @return true if all pixels are valid, false - * 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 Kernel instance with the specified dimensions - * and values. The first width * height values in the specified - * data array are copied to internal storage. - * - * @param width the kernel width. - * @param height the kernel height. - * @param data the source data array (null not permitted). - * - * @throws IllegalArgumentException if data.length is less than - * width * height. - * @throws IllegalArgumentException if width or - * height is less than zero. - * @throws NullPointerException if data is null. - */ - 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 - * (width - 1) / 2. - * - * @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 - * (height - 1) / 2. - * - * @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 - * data argument is non-null, the kernel values - * are copied into it and then data is returned as the result. - * If the data argument is null, this method - * allocates a new array then populates and returns it. - * - * @param data an array to copy the return values into (if - * null, a new array is allocated). - * - * @return The array with copied values. - * - * @throws IllegalArgumentException if data.length is less than - * the kernel's width * height. - */ - 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 LookupTable 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 (null 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 (null 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 (null 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 ImageConsumer with this - * ImageProducer. - * - * @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 ImageConsumer is - * already registered with this ImageProducer. - * - * @param ic the image consumer. - */ - public synchronized boolean isConsumer(ImageConsumer ic) - { - if (consumers.contains(ic)) - return true; - return false; - } - - /** - * Used to remove an ImageConsumer from the list of - * registered consumers for this ImageProducer. - * - * @param ic the image consumer. - */ - public synchronized void removeConsumer(ImageConsumer ic) - { - consumers.removeElement(ic); - } - - /** - * Used to register an ImageConsumer with this - * ImageProducer 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 ImageConsumer with this - * ImageProducer 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 MultiPixelPackedSampleModel with the specified - * data type, which should be one of: - *

    - *
  • {@link DataBuffer#TYPE_BYTE};
  • - *
  • {@link DataBuffer#TYPE_USHORT};
  • - *
  • {@link DataBuffer#TYPE_INT};
  • - *
- * - * @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 MultiPixelPackedSampleModel with the specified - * data type, which should be one of: - *
    - *
  • {@link DataBuffer#TYPE_BYTE};
  • - *
  • {@link DataBuffer#TYPE_USHORT};
  • - *
  • {@link DataBuffer#TYPE_INT};
  • - *
- * - * @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 MultiPixelPackedSample 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 1. - */ - public int getNumDataElements() - { - return 1; - } - - /** - * Returns an array containing the size (in bits) of the samples in each - * band. The MultiPixelPackedSampleModel class supports only - * one band, so this method returns an array with length 1. - * - * @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 - * MultiPixelPackedSampleModel supports only one band -- this - * method ignored the band 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): - *
    - *
  • {@link DataBuffer#TYPE_BYTE};
  • - *
  • {@link DataBuffer#TYPE_USHORT};
  • - *
  • {@link DataBuffer#TYPE_INT};
  • - *
- * - * @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 MultiPixelPackedSampleModel - * only supports a single band, this overridden implementation just returns - * a new instance of MultiPixelPackedSampleModel, 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-null a check is made to ensure that the - * array length is equal to 1). - * - * @throws RasterFormatException if bands is not - * null and bands.length != 1. - */ - 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 - * obj. - * @param y The y-coordinate of the pixel rectangle to store in - * obj. - * @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 iArray is not - * null, 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 null, a new array will be allocated). - * @param data the data buffer (null not permitted). - * - * @return An array containing the pixel sample value. - * - * @throws NullPointerException if data is null. - */ - 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 0 to - * getNumBands() - 1). - * @param data the data buffer (null not permitted). - * - * @return The sample value. - * - * @throws NullPointerException if data is null. - */ - 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 obj. - * @param y The y-coordinate of the data elements in obj. - * @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 (null not permitted). - * @param data the data buffer (null not permitted). - * - * @throws NullPointerException if either iArray or - * data is null. - * - * @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 0 to - * getNumBands() - 1). - * @param s the sample value. - * @param data the data buffer (null not permitted). - * - * @throws NullPointerException if data is null. - */ - 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 true if and only if: - *
    - *
  • obj is not null; - *
  • obj is an instance of - * MultiPixelPackedSampleModel; - *
  • both models have the same: - *
      - *
    • dataType; - *
    • width; - *
    • height; - *
    • numberOfBits; - *
    • scanlineStride; - *
    • dataBitOffsets. - *
    - *
  • - *
- * - * @param obj the object (null permitted) - * - * @return true if this model is equal to obj, and - * false 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 MultiPixelPackedSampleModel. - * - * @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 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 - * (x, y, w, h) within the image. The data will be - * stored in the provided pix array, which must have - * been initialized to a size of at least w * h. The - * data for a pixel (m, n) in the grab rectangle will be stored at - * pix[(n - y) * scansize + (m - x) + off]. - * - * @param img the Image from which to grab pixels - * @param x the x coordinate, relative to img's - * top-left corner, of the grab rectangle's top-left pixel - * @param y the y coordinate, relative to img'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 pix array at which to - * start storing RGB data - * @param scansize a set of scansize consecutive - * elements in the pix 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 - * (x, y, w, h) within the image produced by - * ip. The data will be stored in the provided - * pix array, which must have been initialized to a - * size of at least w * h. The data for a pixel (m, n) - * in the grab rectangle will be stored at - * pix[(n - y) * scansize + (m - x) + off]. - * - * @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 ip - * @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 ip - * @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 pix array at which to - * start storing RGB data - * @param scansize a set of scansize consecutive - * elements in the pix 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 - * (x, y, w, h) within the image. The data will be - * stored in an internal array which can be accessed by calling - * getPixels. The data for a pixel (m, n) in the grab - * rectangle will be stored in the returned array at index - * (n - y) * scansize + (m - x) + off. - * If forceRGB is false, then the returned data will be not be - * converted to RGB from its format in img. - * - * If w is negative, the width of the grab region will - * be from x to the right edge of the image. Likewise, if - * h 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 img's - * top-left corner, of the grab rectangle's top-left pixel - * @param y the y coordinate, relative to img'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 ms. - * - * 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 ms 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 ImageProducer 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 ImageProducer 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 setColorModel to - * indicate the model used by the majority of calls to - * setPixels. Each call to setPixels - * could however indicate a different ColorModel. - * - * 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 ImageProducer may call this method with a - * bit mask of hints from any of RANDOMPIXELORDER, - * TOPDOWNLEFTRIGHT, COMPLETESCANLINES, - * SINGLEPASS, SINGLEFRAME. - * - * 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 ImageProducer 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 SampleModel that uses exactly one element of the - * raster’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 SampleModel 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 SampleModel 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, [0, 2, 3] 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 - * pixels array - * @param scansize the width to use in extracting pixels from the - * pixels 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 ColorModel used to translate the pixels - * @param pixels the array of pixel values - * @param offset the index of the first pixels in the pixels - * array - * @param scansize the width to use in extracting pixels from the - * pixels 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 int 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 ColorModel used to translate the pixels - * @param pixels the array of pixel values - * @param offset the index of the first pixels in the pixels - * array - * @param scansize the width to use in extracting pixels from the - * pixels 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 (null 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 iArray is not null, 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 null, 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 fArray is not null, 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 null, 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 dArray is not null, 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 null, 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 iArray is not null, 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 null, 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 fArray is not null, 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 null, 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 dArray is not null, 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 null, 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 0 to - * getNumBands() - 1). - * - * @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 0 to - * getNumBands() - 1). - * - * @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 0 to - * getNumBands() - 1). - * - * @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 - * iArray is not null, 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 0 to - * getNumBands() - 1). - * @param iArray an array to populate with the sample values and return as - * the result (if null, 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 - * fArray is not null, 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 0 to - * getNumBands() - 1). - * @param fArray an array to populate with the sample values and return as - * the result (if null, 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 - * dArray is not null, 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 0 to - * getNumBands() - 1). - * @param dArray an array to populate with the sample values and return as - * the result (if null, 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: - *
    - *
  • {@link DataBuffer#TYPE_BYTE};
  • - *
  • {@link DataBuffer#TYPE_USHORT};
  • - *
  • {@link DataBuffer#TYPE_SHORT};
  • - *
  • {@link DataBuffer#TYPE_INT};
  • - *
  • {@link DataBuffer#TYPE_FLOAT};
  • - *
  • {@link DataBuffer#TYPE_DOUBLE};
  • - *
- * 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 - * Raster - * - * @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 dest is null, a new - * WritableRaster will be created by calling the - * {@link #createCompatibleDestRaster(Raster)} method. If dest - * is not null, the result is written to dest then - * returned (this avoids creating a new WritableRaster each - * time this method is called). - * - * @param src the source raster. - * @param dest the destination raster (null permitted). - * - * @return The filtered raster. - */ - WritableRaster filter(Raster src, WritableRaster dest); - - /** - * Returns the bounds of the destination raster on the basis of this - * RasterOp 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 RasterOp 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 (null 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 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. - *
- * 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 ImageProducer 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 setDimensions 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 ImageProducer 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 prop2 = (Hashtable) 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 byte 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 ColorModel used to translate the pixels - * @param pixels the array of pixel values - * @param offset the index of the first pixels in the pixels array - * @param scansize the width to use in extracting pixels from the pixels 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 int 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 ColorModel used to translate the pixels - * @param pixels the array of pixel values - * @param offset the index of the first pixels in the pixels array - * @param scansize the width to use in extracting pixels from the pixels 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 SampleModel 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 dataType is not one of - * the listed values. - * @throws IllegalArgumentException if w is less than or equal - * to zero. - * @throws IllegalArgumentException if h is less than or equal - * to zero. - * @throws IllegalArgumentException if w * h 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 - * SampleModel. - * - * @return The width. - * - * @see #getHeight() - */ - public final int getWidth() - { - return width; - } - - /** - * Returns the height of the pixel data accessible via this - * SampleModel. - * - * @return The height. - * - * @see #getWidth() - */ - public final int getHeight() - { - return height; - } - - /** - * Returns the number of bands for this SampleModel. - * - * @return The number of bands. - */ - public final int getNumBands() - { - return numBands; - } - - public abstract int getNumDataElements(); - - /** - * Returns the type of the {@link DataBuffer} that this - * SampleModel 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 iArray is not null, - * 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 null, a new array will be allocated). - * @param data the data buffer (null not permitted). - * - * @return The pixel sample values. - * - * @throws NullPointerException if data is null. - */ - 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 fArray is not null, - * 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 null, a new array will be allocated). - * @param data the data buffer (null not permitted). - * - * @return The pixel sample values. - * - * @throws NullPointerException if data is null. - */ - 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 dArray is not null, - * 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 null, a new array will be allocated). - * @param data the data buffer (null not permitted). - * - * @return The pixel sample values. - * - * @throws NullPointerException if data is null. - */ - 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 iArray is not null, 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 null, a new array will be allocated). - * @param data the data buffer (null not permitted). - * - * @return The pixel sample values. - * - * @throws NullPointerException if data is null. - */ - 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 fArray is not null, 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 null, a new array will be allocated). - * @param data the data buffer (null not permitted). - * - * @return The pixel sample values. - * - * @throws NullPointerException if data is null. - */ - 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 dArray is not null, 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 null, a new array will be allocated). - * @param data the data buffer (null not permitted). - * - * @return The pixel sample values. - * - * @throws NullPointerException if data is null. - */ - 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 0 to - * getNumBands() - 1). - * @param data the data buffer (null not permitted). - * - * @return The sample value. - * - * @throws NullPointerException if data is null. - */ - 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 0 to - * getNumBands() - 1). - * @param data the data buffer (null not permitted). - * - * @return The sample value. - * - * @throws NullPointerException if data is null. - * - * @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 0 to - * getNumBands() - 1). - * @param data the data buffer (null not permitted). - * - * @return The sample value. - * - * @throws NullPointerException if data is null. - * - * @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 - * iArray is not null, 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 0 to - * getNumBands() - 1). - * @param iArray an array to populate with the sample values and return as - * the result (if null, a new array will be allocated). - * @param data the data buffer (null not permitted). - * - * @return The sample values. - * - * @throws NullPointerException if data is null. - */ - 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 - * fArray is not null, 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 0 to - * getNumBands() - 1). - * @param fArray an array to populate with the sample values and return as - * the result (if null, a new array will be allocated). - * @param data the data buffer (null not permitted). - * - * @return The sample values. - * - * @throws NullPointerException if data is null. - */ - 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 - * dArray is not null, 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 0 to - * getNumBands() - 1). - * @param dArray an array to populate with the sample values and return as - * the result (if null, a new array will be allocated). - * @param data the data buffer (null not permitted). - * - * @return The sample values. - * - * @throws NullPointerException if data is null. - */ - 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 (null not permitted). - * @param data the data buffer (null not permitted). - * - * @throws NullPointerException if either iArray or - * data is null. - */ - 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 (null not permitted). - * @param data the data buffer (null not permitted). - * - * @throws NullPointerException if either fArray or - * data is null. - */ - 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 (null not permitted). - * @param data the data buffer (null not permitted). - * - * @throws NullPointerException if either dArray or - * data is null. - */ - 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 (null not permitted). - * @param data the data buffer (null not permitted). - * - * @throws NullPointerException if either iArray or - * data is null. - */ - 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 (null not permitted). - * @param data the data buffer (null not permitted). - * - * @throws NullPointerException if either fArray or - * data is null. - */ - 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 (null not permitted). - * @param data the data buffer (null not permitted). - * - * @throws NullPointerException if either dArray or - * data is null. - */ - 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 0 to - * getNumBands() - 1). - * @param s the sample value. - * @param data the data buffer (null not permitted). - * - * @throws NullPointerException if data is null. - */ - 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 0 to - * getNumBands() - 1). - * @param s the sample value. - * @param data the data buffer (null not permitted). - * - * @throws NullPointerException if data is null. - */ - 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 0 to - * getNumBands() - 1). - * @param s the sample value. - * @param data the data buffer (null not permitted). - * - * @throws NullPointerException if data is null. - */ - 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 0 to - * getNumBands() - 1). - * @param iArray the sample values (null not permitted). - * @param data the data buffer (null not permitted). - * - * @throws NullPointerException if either iArray or - * data is null. - */ - 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 0 to - * getNumBands() - 1). - * @param fArray the sample values (null not permitted). - * @param data the data buffer (null not permitted). - * - * @throws NullPointerException if either iArray or - * data is null. - */ - 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 0 to - * getNumBands() - 1). - * @param dArray the sample values (null not permitted). - * @param data the data buffer (null not permitted). - * - * @throws NullPointerException if either iArray or - * data is null. - */ - 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 SampleModel 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 - * SampleModel. - * - * @return The data buffer. - */ - public abstract DataBuffer createDataBuffer(); - - /** - * Returns an array containing the size (in bits) for each band accessed by - * the SampleModel. - * - * @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 0 to - * getNumBands() - 1). - * - * @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 ShortLookupTable 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 < 0 or data.length < 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 ShortLookupTable 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 (null not - * permitted). - * @exception IllegalArgumentException if offset < 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 SampleModel 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 SinglePixelPackedSampleModel. - * - * @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 SinglePixelPackedSampleModel. - * - * @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 1. - */ - public int getNumDataElements() - { - return 1; - } - - /** - * Creates a new SampleModel 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 SampleModel. - * - * @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 0 to - * getNumBands() - 1). - * - * @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 SinglePixelPackedSampleModel that accesses - * the specified subset of bands. - * - * @param bands an array containing band indices (null not - * permitted). - * - * @return A new sample model. - * - * @throws NullPointerException if bands is null. - * @throws RasterFormatException if bands.length 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 iArray is not null, - * 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 null, a new array will be allocated). - * @param data the data buffer (null not permitted). - * - * @return The pixel sample values. - * - * @throws NullPointerException if data is null. - */ - 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 iArray is not null, 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 null, a new array will be allocated). - * @param data the data buffer (null not permitted). - * - * @return The pixel sample values. - * - * @throws NullPointerException if data is null. - */ - 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 0 to - * getNumBands() - 1). - * @param data the data buffer (null not permitted). - * - * @return The sample value. - * - * @throws NullPointerException if data is null. - */ - 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 (null not permitted). - * @param data the data buffer (null not permitted). - * - * @throws NullPointerException if either iArray or - * data is null. - */ - 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 obj. - * @param y The y-coordinate of the pixel rectangle in obj. - * @param w The width of the pixel rectangle in obj. - * @param h The height of the pixel rectangle in obj. - * @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 0 to - * getNumBands() - 1). - * @param s the sample value. - * @param data the data buffer (null not permitted). - * - * @throws NullPointerException if data is null. - */ - 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 true if and only if: - *
    - *
  • obj is not null; - *
  • obj is an instance of - * SinglePixelPackedSampleModel; - *
  • both models have the same: - *
      - *
    • dataType; - *
    • width; - *
    • height; - *
    • numBands; - *
    • scanlineStride; - *
    • bitMasks; - *
    • bitOffsets. - *
    - *
  • - *
- * - * @param obj the object (null permitted) - * - * @return true if this model is equal to obj, and - * false 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 SinglePixelPackedSampleModel. - * - * @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: - *
    - *
  • IMAGE_OK if the image did not need to be - * validated and didn't need to be restored
  • - *
  • IMAGE_RESTORED if the image may need to be - * re-rendered.
  • - *
  • IMAGE_INCOMPATIBLE 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.
  • - *
- */ - 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 WritableRaster. - * - * @param sampleModel the sample model. - * @param origin the origin. - */ - protected WritableRaster(SampleModel sampleModel, Point origin) - { - this(sampleModel, sampleModel.createDataBuffer(), origin); - } - - /** - * Creates a new WritableRaster 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 WritableRaster 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 (null not permitted). - * - * @throws NullPointerException if iArray is null. - */ - 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 (null not permitted). - * - * @throws NullPointerException if fArray is null. - */ - 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 (null not permitted). - * - * @throws NullPointerException if dArray is null. - */ - 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 (null not permitted). - * - * @throws NullPointerException if iArray is null. - */ - 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 (null not permitted). - * - * @throws NullPointerException if fArray is null. - */ - 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 (null not permitted). - * - * @throws NullPointerException if dArray is null. - */ - 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 0 to - * getNumBands() - 1). - * @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 0 to - * getNumBands() - 1). - * @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 0 to - * getNumBands() - 1). - * @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 0 to - * getNumBands() - 1). - * @param iArray the sample values (null not permitted). - * - * @throws NullPointerException if iArray is null. - */ - 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 0 to - * getNumBands() - 1). - * @param fArray the sample values (null not permitted). - * - * @throws NullPointerException if fArray is null. - */ - 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 0 to - * getNumBands() - 1). - * @param dArray the sample values (null not permitted). - * - * @throws NullPointerException if dArray is null. - */ - 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 @@ - - - - -GNU Classpath - java.awt.image - - -

Image consumers, producers and filters.

- - - 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 sources; - protected Vector parameters; - - public ParameterBlock() - { - this(new Vector(), new Vector()); - } - - public ParameterBlock(Vector sources) - { - this(sources, new Vector()); - } - - public ParameterBlock(Vector sources, Vector 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) sources.clone(); - if (parameters != null) - pb.parameters = (Vector) 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 getSources() - { - return sources; - } - - public void setSources(Vector sources) - { - this.sources = sources; - } - - public void removeSources() - { - if (sources != null) - sources.clear(); - } - - public int getNumParameters() - { - return parameters.size(); - } - - public Vector getParameters() - { - return parameters; - } - - public void setParameters(Vector 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 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 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 @@ - - - - -GNU Classpath - java.awt.image.renderable - - -

- - - -- cgit v1.1