| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| /** |
| * @author Igor V. Stolyarov |
| * @version $Revision$ |
| */ |
| |
| package java.awt.image; |
| |
| import java.awt.Point; |
| import java.awt.Rectangle; |
| |
| import org.apache.harmony.awt.gl.image.OrdinaryWritableRaster; |
| import org.apache.harmony.awt.internal.nls.Messages; |
| |
| /** |
| * The Raster class represents a rectangular area of pixels. This class is |
| * defined by DataBuffer and SampleModel objects. The DataBuffer object stores |
| * sample values and DSampleModel defines the location of sample in this |
| * DataBuffer. |
| * |
| * @since Android 1.0 |
| */ |
| public class Raster { |
| |
| /** |
| * The DataBuffer of this Raster. |
| */ |
| protected DataBuffer dataBuffer; |
| |
| /** |
| * The height of this Raster. |
| */ |
| protected int height; |
| |
| /** |
| * The X coordinate of the upper left pixel in this Raster. |
| */ |
| protected int minX; |
| |
| /** |
| * The Y coordinate of the upper left pixel in this Raster. |
| */ |
| protected int minY; |
| |
| /** |
| * The number of bands in this Raster. |
| */ |
| protected int numBands; |
| |
| /** |
| * The number of data elements. |
| */ |
| protected int numDataElements; |
| |
| /** |
| * The parent of this Raster. |
| */ |
| protected Raster parent; |
| |
| /** |
| * The SampleModel of this Raster. |
| */ |
| protected SampleModel sampleModel; |
| |
| /** |
| * The X translation from the coordinate space of the SampleModel of this |
| * Raster. |
| */ |
| protected int sampleModelTranslateX; |
| |
| /** |
| * The Y translation from the coordinate space of the SampleModel of this |
| * Raster. |
| */ |
| protected int sampleModelTranslateY; |
| |
| /** |
| * The width of this Raster. |
| */ |
| protected int width; |
| |
| /** |
| * Creates a Raster object with a BandedSampleModel and the specified |
| * DataBuffer. The number of bands is defined by the length of bandOffsets |
| * or bankIndices arrays. |
| * |
| * @param dataBuffer |
| * the specified DataBuffer. |
| * @param w |
| * the width of the image data. |
| * @param h |
| * the height of the image data. |
| * @param scanlineStride |
| * the scanline stride of the image data. |
| * @param bankIndices |
| * the bank indices of bands. |
| * @param bandOffsets |
| * the band offsets of bands. |
| * @param location |
| * the location which defines the upper left corner of Raster. |
| * @return the WritableRaster object. |
| */ |
| public static WritableRaster createBandedRaster(DataBuffer dataBuffer, int w, int h, |
| int scanlineStride, int bankIndices[], int bandOffsets[], Point location) { |
| |
| if (w <= 0 || h <= 0) { |
| // awt.22E=w or h is less than or equal to zero |
| throw new RasterFormatException(Messages.getString("awt.22E")); //$NON-NLS-1$ |
| } |
| |
| if (location == null) { |
| location = new Point(0, 0); |
| } |
| |
| if ((long)location.x + w > Integer.MAX_VALUE || (long)location.y + h > Integer.MAX_VALUE) { |
| // awt.276=location.x + w or location.y + h results in integer |
| // overflow |
| throw new RasterFormatException(Messages.getString("awt.276")); //$NON-NLS-1$ |
| } |
| |
| if (bankIndices == null || bandOffsets == null) { |
| // awt.277=bankIndices or bandOffsets is null |
| throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.277")); //$NON-NLS-1$ |
| } |
| |
| if (dataBuffer == null) { |
| // awt.278=dataBuffer is null |
| throw new NullPointerException(Messages.getString("awt.278")); //$NON-NLS-1$ |
| } |
| |
| int dataType = dataBuffer.getDataType(); |
| |
| if (dataType != DataBuffer.TYPE_BYTE && dataType != DataBuffer.TYPE_USHORT |
| && dataType != DataBuffer.TYPE_INT) { |
| // awt.230=dataType is not one of the supported data types |
| throw new IllegalArgumentException(Messages.getString("awt.230")); //$NON-NLS-1$ |
| } |
| |
| BandedSampleModel sampleModel = new BandedSampleModel(dataType, w, h, scanlineStride, |
| bankIndices, bandOffsets); |
| |
| return new OrdinaryWritableRaster(sampleModel, dataBuffer, location); |
| } |
| |
| /** |
| * Creates a Raster object with a BandedSampleModel and the specified data |
| * type. The Data type can be one of the following values: TYPE_BYTE, |
| * TYPE_USHORT, or TYPE_INT. |
| * |
| * @param dataType |
| * the data type of the samples: TYPE_BYTE, TYPE_USHORT, or |
| * TYPE_INT. |
| * @param w |
| * the width of the image data. |
| * @param h |
| * the height of the image data. |
| * @param scanlineStride |
| * the scanline stride of the image data. |
| * @param bankIndices |
| * the bank indices of bands. |
| * @param bandOffsets |
| * the band offsets of bands. |
| * @param location |
| * the location which defines the upper left corner of the |
| * Raster. |
| * @return the WritableRaster object. |
| */ |
| public static WritableRaster createBandedRaster(int dataType, int w, int h, int scanlineStride, |
| int bankIndices[], int bandOffsets[], Point location) { |
| |
| if (w <= 0 || h <= 0) { |
| // awt.22E=w or h is less than or equal to zero |
| throw new RasterFormatException(Messages.getString("awt.22E")); //$NON-NLS-1$ |
| } |
| |
| if (location == null) { |
| location = new Point(0, 0); |
| } |
| |
| if ((long)location.x + w > Integer.MAX_VALUE || (long)location.y + h > Integer.MAX_VALUE) { |
| // awt.276=location.x + w or location.y + h results in integer |
| // overflow |
| throw new RasterFormatException(Messages.getString("awt.276")); //$NON-NLS-1$ |
| } |
| |
| if (bankIndices == null || bandOffsets == null) { |
| // awt.277=bankIndices or bandOffsets is null |
| throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.277")); //$NON-NLS-1$ |
| } |
| |
| if (dataType != DataBuffer.TYPE_BYTE && dataType != DataBuffer.TYPE_USHORT |
| && dataType != DataBuffer.TYPE_INT) { |
| // awt.230=dataType is not one of the supported data types |
| throw new IllegalArgumentException(Messages.getString("awt.230")); //$NON-NLS-1$ |
| } |
| |
| int maxOffset = bandOffsets[0]; |
| int maxBank = bankIndices[0]; |
| |
| for (int i = 0; i < bankIndices.length; i++) { |
| if (bandOffsets[i] > maxOffset) { |
| maxOffset = bandOffsets[i]; |
| } |
| if (bankIndices[i] > maxBank) { |
| maxBank = bankIndices[i]; |
| } |
| } |
| |
| int numBanks = maxBank + 1; |
| int dataSize = scanlineStride * (h - 1) + w + maxOffset; |
| |
| DataBuffer data = null; |
| |
| switch (dataType) { |
| case DataBuffer.TYPE_BYTE: |
| data = new DataBufferByte(dataSize, numBanks); |
| break; |
| case DataBuffer.TYPE_USHORT: |
| data = new DataBufferUShort(dataSize, numBanks); |
| break; |
| case DataBuffer.TYPE_INT: |
| data = new DataBufferInt(dataSize, numBanks); |
| break; |
| } |
| return createBandedRaster(data, w, h, scanlineStride, bankIndices, bandOffsets, location); |
| } |
| |
| /** |
| * Creates a Raster object with a BandedSampleModel and the specified data |
| * type. The Data type can be one of the following values: TYPE_BYTE, |
| * TYPE_USHORT, or TYPE_INT. |
| * |
| * @param dataType |
| * the data type of the samples: TYPE_BYTE, TYPE_USHORT, or |
| * TYPE_INT. |
| * @param w |
| * the width of the image data. |
| * @param h |
| * the height of the image data. |
| * @param bands |
| * the number of bands. |
| * @param location |
| * the location which defines the upper left corner of the |
| * Raster. |
| * @return the WritableRaster object. |
| */ |
| public static WritableRaster createBandedRaster(int dataType, int w, int h, int bands, |
| Point location) { |
| |
| if (w <= 0 || h <= 0) { |
| // awt.22E=w or h is less than or equal to zero |
| throw new RasterFormatException(Messages.getString("awt.22E")); //$NON-NLS-1$ |
| } |
| |
| if (location == null) { |
| location = new Point(0, 0); |
| } |
| |
| if ((long)location.x + w > Integer.MAX_VALUE || (long)location.y + h > Integer.MAX_VALUE) { |
| // awt.276=location.x + w or location.y + h results in integer |
| // overflow |
| throw new RasterFormatException(Messages.getString("awt.276")); //$NON-NLS-1$ |
| } |
| |
| if (bands < 1) { |
| // awt.279=bands is less than 1 |
| throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.279")); //$NON-NLS-1$ |
| } |
| |
| int bandOffsets[] = new int[bands]; |
| int bankIndices[] = new int[bands]; |
| |
| for (int i = 0; i < bands; i++) { |
| bandOffsets[i] = 0; |
| bankIndices[i] = i; |
| } |
| return createBandedRaster(dataType, w, h, w, bankIndices, bandOffsets, location); |
| } |
| |
| /** |
| * Creates a Raster object with a PixelInterleavedSampleModel and the |
| * specified DataBuffer. |
| * |
| * @param dataBuffer |
| * the DataBuffer. |
| * @param w |
| * the width of image data. |
| * @param h |
| * the height of image data. |
| * @param scanlineStride |
| * the scanline stride of the image data. |
| * @param pixelStride |
| * the pixel stride of image data. |
| * @param bandOffsets |
| * the band offsets of bands. |
| * @param location |
| * the location which defines the upper left corner of the |
| * Raster. |
| * @return the WritableRaster object. |
| */ |
| public static WritableRaster createInterleavedRaster(DataBuffer dataBuffer, int w, int h, |
| int scanlineStride, int pixelStride, int bandOffsets[], Point location) { |
| |
| if (w <= 0 || h <= 0) { |
| // awt.22E=w or h is less than or equal to zero |
| throw new RasterFormatException(Messages.getString("awt.22E")); //$NON-NLS-1$ |
| } |
| |
| if (location == null) { |
| location = new Point(0, 0); |
| } |
| |
| if ((long)location.x + w > Integer.MAX_VALUE || (long)location.y + h > Integer.MAX_VALUE) { |
| // awt.276=location.x + w or location.y + h results in integer |
| // overflow |
| throw new RasterFormatException(Messages.getString("awt.276")); //$NON-NLS-1$ |
| } |
| |
| if (dataBuffer == null) { |
| // awt.278=dataBuffer is null |
| throw new NullPointerException(Messages.getString("awt.278")); //$NON-NLS-1$ |
| } |
| |
| int dataType = dataBuffer.getDataType(); |
| if (dataType != DataBuffer.TYPE_BYTE && dataType != DataBuffer.TYPE_USHORT) { |
| // awt.230=dataType is not one of the supported data types |
| throw new IllegalArgumentException(Messages.getString("awt.230")); //$NON-NLS-1$ |
| } |
| |
| if (dataBuffer.getNumBanks() > 1) { |
| // awt.27A=dataBuffer has more than one bank |
| throw new RasterFormatException(Messages.getString("awt.27A")); //$NON-NLS-1$ |
| } |
| |
| if (bandOffsets == null) { |
| // awt.27B=bandOffsets is null |
| throw new NullPointerException(Messages.getString("awt.27B")); //$NON-NLS-1$ |
| } |
| |
| PixelInterleavedSampleModel sampleModel = new PixelInterleavedSampleModel(dataType, w, h, |
| pixelStride, scanlineStride, bandOffsets); |
| |
| return new OrdinaryWritableRaster(sampleModel, dataBuffer, location); |
| |
| } |
| |
| /** |
| * Creates a Raster object with a PixelInterleavedSampleModel and the |
| * specified data type. The Data type can be one of the following values: |
| * TYPE_BYTE, TYPE_USHORT, or TYPE_INT. |
| * |
| * @param dataType |
| * the data type of the samples: TYPE_BYTE, TYPE_USHORT, or |
| * TYPE_INT. |
| * @param w |
| * the width of image data. |
| * @param h |
| * the height of image data. |
| * @param scanlineStride |
| * the scanline stride of the image data. |
| * @param pixelStride |
| * the pixel stride of image data. |
| * @param bandOffsets |
| * the band offsets of bands. |
| * @param location |
| * the location which defines the upper left corner of the |
| * Raster. |
| * @return the WritableRaster object. |
| */ |
| public static WritableRaster createInterleavedRaster(int dataType, int w, int h, |
| int scanlineStride, int pixelStride, int bandOffsets[], Point location) { |
| |
| if (w <= 0 || h <= 0) { |
| // awt.22E=w or h is less than or equal to zero |
| throw new RasterFormatException(Messages.getString("awt.22E")); //$NON-NLS-1$ |
| } |
| |
| if (location == null) { |
| location = new Point(0, 0); |
| } |
| |
| if ((long)location.x + w > Integer.MAX_VALUE || (long)location.y + h > Integer.MAX_VALUE) { |
| // awt.276=location.x + w or location.y + h results in integer |
| // overflow |
| throw new RasterFormatException(Messages.getString("awt.276")); //$NON-NLS-1$ |
| } |
| |
| if (dataType != DataBuffer.TYPE_BYTE && dataType != DataBuffer.TYPE_USHORT) { |
| // awt.230=dataType is not one of the supported data types |
| throw new IllegalArgumentException(Messages.getString("awt.230")); //$NON-NLS-1$ |
| } |
| |
| if (bandOffsets == null) { |
| // awt.27B=bandOffsets is null |
| throw new NullPointerException(Messages.getString("awt.27B")); //$NON-NLS-1$ |
| } |
| |
| int minOffset = bandOffsets[0]; |
| for (int i = 1; i < bandOffsets.length; i++) { |
| if (bandOffsets[i] < minOffset) { |
| minOffset = bandOffsets[i]; |
| } |
| } |
| int size = (h - 1) * scanlineStride + w * pixelStride + minOffset; |
| DataBuffer data = null; |
| |
| switch (dataType) { |
| case DataBuffer.TYPE_BYTE: |
| data = new DataBufferByte(size); |
| break; |
| case DataBuffer.TYPE_USHORT: |
| data = new DataBufferUShort(size); |
| break; |
| } |
| |
| return createInterleavedRaster(data, w, h, scanlineStride, pixelStride, bandOffsets, |
| location); |
| } |
| |
| /** |
| * Creates a Raster object with a PixelInterleavedSampleModel and the |
| * specified data type. The Data type can be one of the following values: |
| * TYPE_BYTE, TYPE_USHORT, or TYPE_INT. |
| * |
| * @param dataType |
| * the data type of samples: TYPE_BYTE, TYPE_USHORT, or TYPE_INT. |
| * @param w |
| * the width of image data. |
| * @param h |
| * the height of image data. |
| * @param bands |
| * the number of bands. |
| * @param location |
| * the location which defines the upper left corner of the |
| * Raster. |
| * @return the WritableRaster. |
| */ |
| public static WritableRaster createInterleavedRaster(int dataType, int w, int h, int bands, |
| Point location) { |
| |
| if (w <= 0 || h <= 0) { |
| // awt.22E=w or h is less than or equal to zero |
| throw new RasterFormatException(Messages.getString("awt.22E")); //$NON-NLS-1$ |
| } |
| |
| if (location == null) { |
| location = new Point(0, 0); |
| } |
| |
| if ((long)location.x + w > Integer.MAX_VALUE || (long)location.y + h > Integer.MAX_VALUE) { |
| // awt.276=location.x + w or location.y + h results in integer |
| // overflow |
| throw new RasterFormatException(Messages.getString("awt.276")); //$NON-NLS-1$ |
| } |
| |
| if (dataType != DataBuffer.TYPE_BYTE && dataType != DataBuffer.TYPE_USHORT) { |
| // awt.230=dataType is not one of the supported data types |
| throw new IllegalArgumentException(Messages.getString("awt.230")); //$NON-NLS-1$ |
| } |
| |
| int bandOffsets[] = new int[bands]; |
| for (int i = 0; i < bands; i++) { |
| bandOffsets[i] = i; |
| } |
| |
| return createInterleavedRaster(dataType, w, h, w * bands, bands, bandOffsets, location); |
| } |
| |
| /** |
| * Creates a Raster object with a SinglePixelPackedSampleModel and the |
| * specified DataBuffer. |
| * |
| * @param dataBuffer |
| * the DataBuffer. |
| * @param w |
| * the width of the image data. |
| * @param h |
| * the height of the image data. |
| * @param scanlineStride |
| * the scanline stride of the image data. |
| * @param bandMasks |
| * the band masks. |
| * @param location |
| * the location which defines the upper left corner of the |
| * Raster. |
| * @return the WritableRaster. |
| */ |
| public static WritableRaster createPackedRaster(DataBuffer dataBuffer, int w, int h, |
| int scanlineStride, int bandMasks[], Point location) { |
| if (dataBuffer == null) { |
| // awt.278=dataBuffer is null |
| throw new NullPointerException(Messages.getString("awt.278")); //$NON-NLS-1$ |
| } |
| |
| if (w <= 0 || h <= 0) { |
| // awt.22E=w or h is less than or equal to zero |
| throw new RasterFormatException(Messages.getString("awt.22E")); //$NON-NLS-1$ |
| } |
| |
| if (location == null) { |
| location = new Point(0, 0); |
| } |
| |
| if ((long)location.x + w > Integer.MAX_VALUE || (long)location.y + h > Integer.MAX_VALUE) { |
| // awt.276=location.x + w or location.y + h results in integer |
| // overflow |
| throw new RasterFormatException(Messages.getString("awt.276")); //$NON-NLS-1$ |
| } |
| |
| if (bandMasks == null) { |
| // awt.27C=bandMasks is null |
| throw new RasterFormatException(Messages.getString("awt.27C")); //$NON-NLS-1$ |
| } |
| |
| if (dataBuffer.getNumBanks() > 1) { |
| // awt.27A=dataBuffer has more than one bank |
| throw new RasterFormatException(Messages.getString("awt.27A")); //$NON-NLS-1$ |
| } |
| |
| int dataType = dataBuffer.getDataType(); |
| if (dataType != DataBuffer.TYPE_BYTE && dataType != DataBuffer.TYPE_USHORT |
| && dataType != DataBuffer.TYPE_INT) { |
| // awt.230=dataType is not one of the supported data types |
| throw new IllegalArgumentException(Messages.getString("awt.230")); //$NON-NLS-1$ |
| } |
| |
| SinglePixelPackedSampleModel sampleModel = new SinglePixelPackedSampleModel(dataType, w, h, |
| scanlineStride, bandMasks); |
| |
| return new OrdinaryWritableRaster(sampleModel, dataBuffer, location); |
| } |
| |
| /** |
| * Creates a Raster object with a MultiPixelPackedSampleModel and the |
| * specified DataBuffer. |
| * |
| * @param dataBuffer |
| * the DataBuffer. |
| * @param w |
| * the width of the image data. |
| * @param h |
| * the height of the image data. |
| * @param bitsPerPixel |
| * the number of bits per pixel. |
| * @param location |
| * the location which defines the upper left corner of the |
| * Raster. |
| * @return the WritableRaster. |
| */ |
| public static WritableRaster createPackedRaster(DataBuffer dataBuffer, int w, int h, |
| int bitsPerPixel, Point location) { |
| |
| if (w <= 0 || h <= 0) { |
| // awt.22E=w or h is less than or equal to zero |
| throw new RasterFormatException(Messages.getString("awt.22E")); //$NON-NLS-1$ |
| } |
| |
| if (location == null) { |
| location = new Point(0, 0); |
| } |
| |
| if ((long)location.x + w > Integer.MAX_VALUE || (long)location.y + h > Integer.MAX_VALUE) { |
| // awt.276=location.x + w or location.y + h results in integer |
| // overflow |
| throw new RasterFormatException(Messages.getString("awt.276")); //$NON-NLS-1$ |
| } |
| |
| if (dataBuffer == null) { |
| // awt.278=dataBuffer is null |
| throw new NullPointerException(Messages.getString("awt.278")); //$NON-NLS-1$ |
| } |
| |
| if (dataBuffer.getNumBanks() > 1) { |
| // awt.27A=dataBuffer has more than one bank |
| throw new RasterFormatException(Messages.getString("awt.27A")); //$NON-NLS-1$ |
| } |
| |
| int dataType = dataBuffer.getDataType(); |
| if (dataType != DataBuffer.TYPE_BYTE && dataType != DataBuffer.TYPE_USHORT |
| && dataType != DataBuffer.TYPE_INT) { |
| // awt.230=dataType is not one of the supported data types |
| throw new IllegalArgumentException(Messages.getString("awt.230")); //$NON-NLS-1$ |
| } |
| |
| MultiPixelPackedSampleModel sampleModel = new MultiPixelPackedSampleModel(dataType, w, h, |
| bitsPerPixel); |
| |
| return new OrdinaryWritableRaster(sampleModel, dataBuffer, location); |
| |
| } |
| |
| /** |
| * Creates a Raster object with a MultiPixelPackedSampleModel and the |
| * specified DataBuffer. |
| * |
| * @param dataType |
| * the data type of samples: TYPE_BYTE, TYPE_USHORT, or TYPE_INT. |
| * @param w |
| * the width of the image data. |
| * @param h |
| * the height of the image data. |
| * @param bands |
| * the number of bands. |
| * @param bitsPerBand |
| * the number of bits per band. |
| * @param location |
| * the location which defines the upper left corner of the |
| * Raster. |
| * @return the WritableRaster. |
| */ |
| public static WritableRaster createPackedRaster(int dataType, int w, int h, int bands, |
| int bitsPerBand, Point location) { |
| |
| if (w <= 0 || h <= 0) { |
| // awt.22E=w or h is less than or equal to zero |
| throw new RasterFormatException(Messages.getString("awt.22E")); //$NON-NLS-1$ |
| } |
| |
| if (location == null) { |
| location = new Point(0, 0); |
| } |
| |
| if ((long)location.x + w > Integer.MAX_VALUE || (long)location.y + h > Integer.MAX_VALUE) { |
| // awt.276=location.x + w or location.y + h results in integer |
| // overflow |
| throw new RasterFormatException(Messages.getString("awt.276")); //$NON-NLS-1$ |
| } |
| |
| if (bands < 1 || bitsPerBand < 1) { |
| // awt.27D=bitsPerBand or bands is not greater than zero |
| throw new IllegalArgumentException(Messages.getString("awt.27D")); //$NON-NLS-1$ |
| } |
| |
| if (dataType != DataBuffer.TYPE_BYTE && dataType != DataBuffer.TYPE_USHORT |
| && dataType != DataBuffer.TYPE_INT) { |
| // awt.230=dataType is not one of the supported data types |
| throw new IllegalArgumentException(Messages.getString("awt.230")); //$NON-NLS-1$ |
| } |
| |
| if (bitsPerBand * bands > DataBuffer.getDataTypeSize(dataType)) { |
| // awt.27E=The product of bitsPerBand and bands is greater than the |
| // number of bits held by dataType |
| throw new IllegalArgumentException(Messages.getString("awt.27E")); //$NON-NLS-1$ |
| } |
| |
| if (bands > 1) { |
| |
| int bandMasks[] = new int[bands]; |
| int mask = (1 << bitsPerBand) - 1; |
| |
| for (int i = 0; i < bands; i++) { |
| bandMasks[i] = mask << (bitsPerBand * (bands - 1 - i)); |
| } |
| |
| return createPackedRaster(dataType, w, h, bandMasks, location); |
| } |
| DataBuffer data = null; |
| int size = ((bitsPerBand * w + DataBuffer.getDataTypeSize(dataType) - 1) / DataBuffer |
| .getDataTypeSize(dataType)) |
| * h; |
| |
| switch (dataType) { |
| case DataBuffer.TYPE_BYTE: |
| data = new DataBufferByte(size); |
| break; |
| case DataBuffer.TYPE_USHORT: |
| data = new DataBufferUShort(size); |
| break; |
| case DataBuffer.TYPE_INT: |
| data = new DataBufferInt(size); |
| break; |
| } |
| return createPackedRaster(data, w, h, bitsPerBand, location); |
| } |
| |
| /** |
| * Creates a Raster object with a SinglePixelPackedSampleModel and the |
| * specified DataBuffer. |
| * |
| * @param dataType |
| * the data type of samples: TYPE_BYTE, TYPE_USHORT, or TYPE_INT. |
| * @param w |
| * the width of the image data. |
| * @param h |
| * the height of the image data. |
| * @param bandMasks |
| * the band masks. |
| * @param location |
| * the location which defines the upper left corner of the |
| * Raster. |
| * @return the WritableRaster. |
| */ |
| public static WritableRaster createPackedRaster(int dataType, int w, int h, int bandMasks[], |
| Point location) { |
| |
| if (dataType != DataBuffer.TYPE_BYTE && dataType != DataBuffer.TYPE_USHORT |
| && dataType != DataBuffer.TYPE_INT) { |
| // awt.230=dataType is not one of the supported data types |
| throw new IllegalArgumentException(Messages.getString("awt.230")); //$NON-NLS-1$ |
| } |
| |
| if (w <= 0 || h <= 0) { |
| // awt.22E=w or h is less than or equal to zero |
| throw new RasterFormatException(Messages.getString("awt.22E")); //$NON-NLS-1$ |
| } |
| |
| if (location == null) { |
| location = new Point(0, 0); |
| } |
| |
| if ((long)location.x + w > Integer.MAX_VALUE || (long)location.y + h > Integer.MAX_VALUE) { |
| // awt.276=location.x + w or location.y + h results in integer |
| // overflow |
| throw new RasterFormatException(Messages.getString("awt.276")); //$NON-NLS-1$ |
| } |
| |
| if (bandMasks == null) { |
| // awt.27C=bandMasks is null |
| throw new NullPointerException(Messages.getString("awt.27C")); //$NON-NLS-1$ |
| } |
| |
| DataBuffer data = null; |
| |
| switch (dataType) { |
| case DataBuffer.TYPE_BYTE: |
| data = new DataBufferByte(w * h); |
| break; |
| case DataBuffer.TYPE_USHORT: |
| data = new DataBufferUShort(w * h); |
| break; |
| case DataBuffer.TYPE_INT: |
| data = new DataBufferInt(w * h); |
| break; |
| } |
| |
| return createPackedRaster(data, w, h, w, bandMasks, location); |
| } |
| |
| /** |
| * Creates a Raster object with the specified DataBuffer and SampleModel. |
| * |
| * @param sm |
| * the specified SampleModel. |
| * @param db |
| * the specified DataBuffer. |
| * @param location |
| * the location which defines the upper left corner of the |
| * Raster. |
| * @return the Raster. |
| */ |
| public static Raster createRaster(SampleModel sm, DataBuffer db, Point location) { |
| |
| if (sm == null || db == null) { |
| // awt.27F=SampleModel or DataBuffer is null |
| throw new NullPointerException(Messages.getString("awt.27F")); //$NON-NLS-1$ |
| } |
| |
| if (location == null) { |
| location = new Point(0, 0); |
| } |
| |
| return new Raster(sm, db, location); |
| } |
| |
| /** |
| * Creates a WritableRaster with the specified SampleModel and DataBuffer. |
| * |
| * @param sm |
| * the specified SampleModel. |
| * @param db |
| * the specified DataBuffer. |
| * @param location |
| * the location which defines the upper left corner of the |
| * Raster. |
| * @return the WritableRaster. |
| */ |
| public static WritableRaster createWritableRaster(SampleModel sm, DataBuffer db, Point location) { |
| |
| if (sm == null || db == null) { |
| // awt.27F=SampleModel or DataBuffer is null |
| throw new NullPointerException(Messages.getString("awt.27F")); //$NON-NLS-1$ |
| } |
| |
| if (location == null) { |
| location = new Point(0, 0); |
| } |
| |
| return new OrdinaryWritableRaster(sm, db, location); |
| } |
| |
| /** |
| * Creates a WritableRaster with the specified SampleModel. |
| * |
| * @param sm |
| * the specified SampleModel. |
| * @param location |
| * the location which defines the upper left corner of the |
| * Raster. |
| * @return the WritableRaster. |
| */ |
| public static WritableRaster createWritableRaster(SampleModel sm, Point location) { |
| |
| if (sm == null) { |
| // awt.280=SampleModel is null |
| throw new NullPointerException(Messages.getString("awt.280")); //$NON-NLS-1$ |
| } |
| |
| if (location == null) { |
| location = new Point(0, 0); |
| } |
| |
| return createWritableRaster(sm, sm.createDataBuffer(), location); |
| } |
| |
| /** |
| * Instantiates a new Raster object with the specified SampleModel and |
| * DataBuffer. |
| * |
| * @param sampleModel |
| * the specified SampleModel. |
| * @param dataBuffer |
| * the specified DataBuffer. |
| * @param origin |
| * the specified origin. |
| */ |
| protected Raster(SampleModel sampleModel, DataBuffer dataBuffer, Point origin) { |
| |
| this(sampleModel, dataBuffer, new Rectangle(origin.x, origin.y, sampleModel.getWidth(), |
| sampleModel.getHeight()), origin, null); |
| } |
| |
| /** |
| * Instantiates a new Raster object with the specified SampleModel, |
| * DataBuffer, rectangular region and parent Raster. |
| * |
| * @param sampleModel |
| * the specified SampleModel. |
| * @param dataBuffer |
| * the specified DataBuffer. |
| * @param aRegion |
| * the a rectangular region which defines the new image bounds. |
| * @param sampleModelTranslate |
| * this point defines the translation point from the SampleModel |
| * coordinates to the new Raster coordinates. |
| * @param parent |
| * the parent of this Raster. |
| */ |
| protected Raster(SampleModel sampleModel, DataBuffer dataBuffer, Rectangle aRegion, |
| Point sampleModelTranslate, Raster parent) { |
| |
| if (sampleModel == null || dataBuffer == null || aRegion == null |
| || sampleModelTranslate == null) { |
| // awt.281=sampleModel, dataBuffer, aRegion or sampleModelTranslate |
| // is null |
| throw new NullPointerException(Messages.getString("awt.281")); //$NON-NLS-1$ |
| } |
| |
| if (aRegion.width <= 0 || aRegion.height <= 0) { |
| // awt.282=aRegion has width or height less than or equal to zero |
| throw new RasterFormatException(Messages.getString("awt.282")); //$NON-NLS-1$ |
| } |
| |
| if ((long)aRegion.x + (long)aRegion.width > Integer.MAX_VALUE) { |
| // awt.283=Overflow X coordinate of Raster |
| throw new RasterFormatException(Messages.getString("awt.283")); //$NON-NLS-1$ |
| } |
| |
| if ((long)aRegion.y + (long)aRegion.height > Integer.MAX_VALUE) { |
| // awt.284=Overflow Y coordinate of Raster |
| throw new RasterFormatException(Messages.getString("awt.284")); //$NON-NLS-1$ |
| } |
| |
| if (sampleModel instanceof ComponentSampleModel) { |
| validateDataBuffer(dataBuffer, aRegion.width, aRegion.height, |
| ((ComponentSampleModel)sampleModel).getScanlineStride()); |
| } else if (sampleModel instanceof MultiPixelPackedSampleModel) { |
| validateDataBuffer(dataBuffer, aRegion.width, aRegion.height, |
| ((MultiPixelPackedSampleModel)sampleModel).getScanlineStride()); |
| } else if (sampleModel instanceof SinglePixelPackedSampleModel) { |
| validateDataBuffer(dataBuffer, aRegion.width, aRegion.height, |
| ((SinglePixelPackedSampleModel)sampleModel).getScanlineStride()); |
| } |
| |
| this.sampleModel = sampleModel; |
| this.dataBuffer = dataBuffer; |
| this.minX = aRegion.x; |
| this.minY = aRegion.y; |
| this.width = aRegion.width; |
| this.height = aRegion.height; |
| this.sampleModelTranslateX = sampleModelTranslate.x; |
| this.sampleModelTranslateY = sampleModelTranslate.y; |
| this.parent = parent; |
| this.numBands = sampleModel.getNumBands(); |
| this.numDataElements = sampleModel.getNumDataElements(); |
| |
| } |
| |
| /** |
| * Instantiates a new Raster with the specified SampleModel. |
| * |
| * @param sampleModel |
| * the specified SampleModel. |
| * @param origin |
| * the origin. |
| */ |
| protected Raster(SampleModel sampleModel, Point origin) { |
| this(sampleModel, sampleModel.createDataBuffer(), new Rectangle(origin.x, origin.y, |
| sampleModel.getWidth(), sampleModel.getHeight()), origin, null); |
| } |
| |
| /** |
| * Creates the child of this Raster by sharing the specified rectangular |
| * area in this raster. The parentX, parentY, width and height parameters |
| * specify the rectangular area to be shared. |
| * |
| * @param parentX |
| * the X coordinate of the upper left corner of this Raster. |
| * @param parentY |
| * the Y coordinate of the upper left corner of this Raster. |
| * @param width |
| * the width of the child area. |
| * @param height |
| * the height of the child area. |
| * @param childMinX |
| * the X coordinate of child area mapped to the parentX |
| * coordinate. |
| * @param childMinY |
| * the Y coordinate of child area mapped to the parentY |
| * coordinate. |
| * @param bandList |
| * the array of band indices. |
| * @return the Raster. |
| */ |
| public Raster createChild(int parentX, int parentY, int width, int height, int childMinX, |
| int childMinY, int bandList[]) { |
| if (width <= 0 || height <= 0) { |
| // awt.285=Width or Height of child Raster is less than or equal to |
| // zero |
| throw new RasterFormatException(Messages.getString("awt.285")); //$NON-NLS-1$ |
| } |
| |
| if (parentX < this.minX || parentX + width > this.minX + this.width) { |
| // awt.286=parentX disposes outside Raster |
| throw new RasterFormatException(Messages.getString("awt.286")); //$NON-NLS-1$ |
| } |
| |
| if (parentY < this.minY || parentY + height > this.minY + this.height) { |
| // awt.287=parentY disposes outside Raster |
| throw new RasterFormatException(Messages.getString("awt.287")); //$NON-NLS-1$ |
| } |
| |
| if ((long)parentX + width > Integer.MAX_VALUE) { |
| // awt.288=parentX + width results in integer overflow |
| throw new RasterFormatException(Messages.getString("awt.288")); //$NON-NLS-1$ |
| } |
| |
| if ((long)parentY + height > Integer.MAX_VALUE) { |
| // awt.289=parentY + height results in integer overflow |
| throw new RasterFormatException(Messages.getString("awt.289")); //$NON-NLS-1$ |
| } |
| |
| if ((long)childMinX + width > Integer.MAX_VALUE) { |
| // awt.28A=childMinX + width results in integer overflow |
| throw new RasterFormatException(Messages.getString("awt.28A")); //$NON-NLS-1$ |
| } |
| |
| if ((long)childMinY + height > Integer.MAX_VALUE) { |
| // awt.28B=childMinY + height results in integer overflow |
| throw new RasterFormatException(Messages.getString("awt.28B")); //$NON-NLS-1$ |
| } |
| |
| SampleModel childModel; |
| |
| if (bandList == null) { |
| childModel = sampleModel; |
| } else { |
| childModel = sampleModel.createSubsetSampleModel(bandList); |
| } |
| |
| int childTranslateX = childMinX - parentX; |
| int childTranslateY = childMinY - parentY; |
| |
| return new Raster(childModel, dataBuffer, |
| new Rectangle(childMinX, childMinY, width, height), new Point(childTranslateX |
| + sampleModelTranslateX, childTranslateY + sampleModelTranslateY), this); |
| } |
| |
| /** |
| * Create a compatible WritableRaster with the same parameters as this |
| * Raster. |
| * |
| * @return the WritableRaster. |
| */ |
| public WritableRaster createCompatibleWritableRaster() { |
| return new OrdinaryWritableRaster(sampleModel, new Point(0, 0)); |
| } |
| |
| /** |
| * Create a compatible WritableRaster with the same parameters as this |
| * Raster and the specified size. |
| * |
| * @param w |
| * the width of the new WritableRaster. |
| * @param h |
| * the height of the new WritableRaster. |
| * @return the WritableRaster. |
| */ |
| public WritableRaster createCompatibleWritableRaster(int w, int h) { |
| if (w <= 0 || h <= 0) { |
| // awt.22E=w or h is less than or equal to zero |
| throw new RasterFormatException(Messages.getString("awt.22E")); //$NON-NLS-1$ |
| } |
| |
| SampleModel sm = sampleModel.createCompatibleSampleModel(w, h); |
| |
| return new OrdinaryWritableRaster(sm, new Point(0, 0)); |
| } |
| |
| /** |
| * Create a compatible WritableRaster with the same parameters as this |
| * Raster and the specified size and location. |
| * |
| * @param x |
| * the X coordinate of the new WritableRaster. |
| * @param y |
| * the Y coordinate of the new WritableRaster. |
| * @param w |
| * the width of the new WritableRaster. |
| * @param h |
| * the height of the new WritableRaster. |
| * @return the WritableRaster. |
| */ |
| public WritableRaster createCompatibleWritableRaster(int x, int y, int w, int h) { |
| |
| WritableRaster raster = createCompatibleWritableRaster(w, h); |
| |
| return raster.createWritableChild(0, 0, w, h, x, y, null); |
| } |
| |
| /** |
| * Create a compatible WritableRaster with the same parameters as this |
| * Raster and the specified rectangle which determines new WritableRaster's |
| * location and size. |
| * |
| * @param rect |
| * the specified Rectangle. |
| * @return the WritableRaster. |
| */ |
| public WritableRaster createCompatibleWritableRaster(Rectangle rect) { |
| if (rect == null) { |
| // awt.28C=Rect is null |
| throw new NullPointerException(Messages.getString("awt.28C")); //$NON-NLS-1$ |
| } |
| |
| return createCompatibleWritableRaster(rect.x, rect.y, rect.width, rect.height); |
| } |
| |
| /** |
| * Creates the translated child of this Raster. The New Raster object is a |
| * reference to the this Raster with a different location. |
| * |
| * @param childMinX |
| * the X coordinate of the new Raster. |
| * @param childMinY |
| * the Y coordinate of the new Raster. |
| * @return the Raster. |
| */ |
| public Raster createTranslatedChild(int childMinX, int childMinY) { |
| return createChild(minX, minY, width, height, childMinX, childMinY, null); |
| } |
| |
| /** |
| * Gets the bounds of this Raster as a rectangle. |
| * |
| * @return the bounds of this Raster. |
| */ |
| public Rectangle getBounds() { |
| return new Rectangle(minX, minY, width, height); |
| } |
| |
| /** |
| * Gets the DataBuffer associated with this Raster. |
| * |
| * @return the DataBuffer associated with this Raster. |
| */ |
| public DataBuffer getDataBuffer() { |
| return dataBuffer; |
| } |
| |
| /** |
| * Gets the data elements which represent the pixel data of the specified |
| * rectangle area as a primitive array. The following image data types are |
| * supported: DataBuffer.TYPE_BYTE, DataBuffer.TYPE_USHORT, |
| * DataBuffer.TYPE_INT, DataBuffer.TYPE_SHORT, DataBuffer.TYPE_FLOAT, or |
| * DataBuffer.TYPE_DOUBLE. |
| * |
| * @param x |
| * the X coordinate of the area of pixels. |
| * @param y |
| * the Y coordinate of the area of pixels. |
| * @param w |
| * the width of the area of pixels. |
| * @param h |
| * the height of the area of pixels. |
| * @param outData |
| * the resulting array. |
| * @return the data elements of the specified area of this Raster. |
| */ |
| public Object getDataElements(int x, int y, int w, int h, Object outData) { |
| return sampleModel.getDataElements(x - sampleModelTranslateX, y - sampleModelTranslateY, w, |
| h, outData, dataBuffer); |
| } |
| |
| /** |
| * Gets the data elements which represent the specified pixel of this Raster |
| * as a primitive array. The following image data types are supported: |
| * DataBuffer.TYPE_BYTE, DataBuffer.TYPE_USHORT, DataBuffer.TYPE_INT, |
| * DataBuffer.TYPE_SHORT, DataBuffer.TYPE_FLOAT, or DataBuffer.TYPE_DOUBLE. |
| * |
| * @param x |
| * the X coordinate of the pixel. |
| * @param y |
| * the Y coordinate of the pixel. |
| * @param outData |
| * the resulting data. |
| * @return the data elements of the specified pixel of this Raster. |
| */ |
| public Object getDataElements(int x, int y, Object outData) { |
| return sampleModel.getDataElements(x - sampleModelTranslateX, y - sampleModelTranslateY, |
| outData, dataBuffer); |
| } |
| |
| /** |
| * Gets the height of this Raster. |
| * |
| * @return the height of this Raster. |
| */ |
| public final int getHeight() { |
| return height; |
| } |
| |
| /** |
| * Gets the minimum X coordinate of this Raster. |
| * |
| * @return the minimum X coordinate of this Raster. |
| */ |
| public final int getMinX() { |
| return minX; |
| } |
| |
| /** |
| * Gets the minimum Y coordinate of this Raster. |
| * |
| * @return the minimum Y coordinate of this Raster. |
| */ |
| public final int getMinY() { |
| return minY; |
| } |
| |
| /** |
| * Gets the number of bands in this Raster. |
| * |
| * @return the number of bands in this Raster. |
| */ |
| public final int getNumBands() { |
| return numBands; |
| } |
| |
| /** |
| * Gets the number of data elements for one pixel. |
| * |
| * @return the number of data elements for one pixel. |
| */ |
| public final int getNumDataElements() { |
| return numDataElements; |
| } |
| |
| /** |
| * Gets the parent Raster for this Raster object. |
| * |
| * @return the parent Raster for this Raster object. |
| */ |
| public Raster getParent() { |
| return parent; |
| } |
| |
| /** |
| * Gets a double array of samples for the specified pixel in this Raster. |
| * |
| * @param x |
| * the pixel's X coordinate. |
| * @param y |
| * the pixel's Y coordinate. |
| * @param dArray |
| * the double array where result array will be stored. |
| * @return the double array of samples for the specified pixel in this |
| * Raster. |
| */ |
| public double[] getPixel(int x, int y, double dArray[]) { |
| return sampleModel.getPixel(x - sampleModelTranslateX, y - sampleModelTranslateY, dArray, |
| dataBuffer); |
| } |
| |
| /** |
| * Gets a float array of samples for the specified pixel in this Raster. |
| * |
| * @param x |
| * the pixel's X coordinate. |
| * @param y |
| * the pixel's Y coordinate. |
| * @param fArray |
| * the float array where the result array will be stored. |
| * @return the float array of samples for the specified pixel in this |
| * Raster. |
| */ |
| public float[] getPixel(int x, int y, float fArray[]) { |
| return sampleModel.getPixel(x - sampleModelTranslateX, y - sampleModelTranslateY, fArray, |
| dataBuffer); |
| } |
| |
| /** |
| * Gets an integer array of samples for the specified pixel in this Raster. |
| * |
| * @param x |
| * the pixel's X coordinate. |
| * @param y |
| * the pixel's Y coordinate. |
| * @param iArray |
| * the integer array where the result array will be stored. |
| * @return the integer array of samples for the specified pixel in this |
| * Raster. |
| */ |
| public int[] getPixel(int x, int y, int iArray[]) { |
| return sampleModel.getPixel(x - sampleModelTranslateX, y - sampleModelTranslateY, iArray, |
| dataBuffer); |
| } |
| |
| /** |
| * Gets an double array of samples for the specified rectangular area of |
| * pixels in this Raster. |
| * |
| * @param x |
| * the X coordinate of the area of pixels. |
| * @param y |
| * the Y coordinate of the area of pixels. |
| * @param w |
| * the width of the area of pixels. |
| * @param h |
| * the height of the area of pixels. |
| * @param dArray |
| * the resulting array. |
| * @return the double array of samples for the specified rectangular area of |
| * pixels in this Raster. |
| */ |
| public double[] getPixels(int x, int y, int w, int h, double dArray[]) { |
| return sampleModel.getPixels(x - sampleModelTranslateX, y - sampleModelTranslateY, w, h, |
| dArray, dataBuffer); |
| } |
| |
| /** |
| * Gets an float array of samples for the specified rectangular area of |
| * pixels in this Raster. |
| * |
| * @param x |
| * the X coordinate of the area of pixels. |
| * @param y |
| * the Y coordinate of the area of pixels. |
| * @param w |
| * the width of the area of pixels. |
| * @param h |
| * the height of the area of pixels. |
| * @param fArray |
| * the resulting array. |
| * @return the float array of samples for the specified rectangular area of |
| * pixels in this Raster. |
| */ |
| public float[] getPixels(int x, int y, int w, int h, float fArray[]) { |
| return sampleModel.getPixels(x - sampleModelTranslateX, y - sampleModelTranslateY, w, h, |
| fArray, dataBuffer); |
| } |
| |
| /** |
| * Gets an integer array of samples for the specified rectangular area of |
| * pixels in this raster. |
| * |
| * @param x |
| * the X coordinate of the area of pixels. |
| * @param y |
| * the Y coordinate of the area of pixels. |
| * @param w |
| * the width of pixel's the area of pixels. |
| * @param h |
| * the height of pixel's the area of pixels. |
| * @param iArray |
| * the resulting array. |
| * @return the integer array of samples for the specified rectangular area |
| * of pixels in this Raster. |
| */ |
| public int[] getPixels(int x, int y, int w, int h, int iArray[]) { |
| return sampleModel.getPixels(x - sampleModelTranslateX, y - sampleModelTranslateY, w, h, |
| iArray, dataBuffer); |
| } |
| |
| /** |
| * Gets the sample for the specified band of the specified pixel as an |
| * integer. |
| * |
| * @param x |
| * the X coordinate of the pixel. |
| * @param y |
| * the Y coordinate of the pixel. |
| * @param b |
| * the band. |
| * @return the sample for the specified band of the specified pixel as an |
| * integer. |
| */ |
| public int getSample(int x, int y, int b) { |
| return sampleModel.getSample(x - sampleModelTranslateX, y - sampleModelTranslateY, b, |
| dataBuffer); |
| } |
| |
| /** |
| * Gets the sample for the specified band of the specified pixel as a |
| * double. |
| * |
| * @param x |
| * the X coordinate of the pixel. |
| * @param y |
| * the Y coordinate of the pixel. |
| * @param b |
| * the band. |
| * @return the sample for the specified band of the specified pixel as a |
| * double. |
| */ |
| public double getSampleDouble(int x, int y, int b) { |
| return sampleModel.getSampleDouble(x - sampleModelTranslateX, y - sampleModelTranslateY, b, |
| dataBuffer); |
| } |
| |
| /** |
| * Gets the sample for the specified band of the specified pixel as a float. |
| * |
| * @param x |
| * the X coordinate of the pixel. |
| * @param y |
| * the Y coordinate of the pixel. |
| * @param b |
| * the band. |
| * @return the sample for the specified band of the specified pixel as a |
| * float. |
| */ |
| public float getSampleFloat(int x, int y, int b) { |
| return sampleModel.getSampleFloat(x - sampleModelTranslateX, y - sampleModelTranslateY, b, |
| dataBuffer); |
| } |
| |
| /** |
| * Gets the SampleModel associated with this Raster. |
| * |
| * @return the SampleModel associated with this Raster. |
| */ |
| public SampleModel getSampleModel() { |
| return sampleModel; |
| } |
| |
| /** |
| * Gets the translation of the X coordinate from the SampleModel coordinate |
| * system to the Rasters's coordinate system. |
| * |
| * @return the value of the translation of the X coordinate from the |
| * SampleModel coordinate system to the Rasters's coordinate system. |
| */ |
| public final int getSampleModelTranslateX() { |
| return sampleModelTranslateX; |
| } |
| |
| /** |
| * Gets the translation of the Y coordinate from the SampleModel coordinate |
| * system to the Rasters's coordinate system. |
| * |
| * @return the value of the translation of the Y coordinate from the |
| * SampleModel coordinate system to the Rasters's coordinate system. |
| */ |
| public final int getSampleModelTranslateY() { |
| return sampleModelTranslateY; |
| } |
| |
| /** |
| * Gets the double array of samples for the specified band of the specified |
| * rectangular area of pixels in this Raster as a double array. |
| * |
| * @param x |
| * the X coordinate of the rectangular area of pixels. |
| * @param y |
| * the Y coordinate of the rectangular area of pixels. |
| * @param w |
| * the width of the rectangular area of pixels. |
| * @param h |
| * the height of the rectangular area of pixels. |
| * @param b |
| * the band. |
| * @param dArray |
| * the resulting double array. |
| * @return the double array of samples for the specified band of the |
| * specified rectangular area of pixels. |
| */ |
| 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); |
| } |
| |
| /** |
| * Gets the float array of samples for the specified band of the specified |
| * rectangular area of pixels in this Raster as a float array. |
| * |
| * @param x |
| * the X coordinate of the rectangular area of pixels. |
| * @param y |
| * the Y coordinate of the rectangular area of pixels. |
| * @param w |
| * the width of the rectangular area of pixels. |
| * @param h |
| * the height of the rectangular area of pixels. |
| * @param b |
| * the band. |
| * @param fArray |
| * the resulting float array. |
| * @return the float array of samples for the specified band of the |
| * specified rectangular area of pixels. |
| */ |
| 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); |
| } |
| |
| /** |
| * Gets the integer array of samples for the specified band of the specified |
| * rectangular area of pixels in this Raster as a integer array. |
| * |
| * @param x |
| * the X coordinate of the rectangular area of pixels. |
| * @param y |
| * the Y coordinate of the rectangular area of pixels. |
| * @param w |
| * the width of the rectangular area of pixels. |
| * @param h |
| * the height of the rectangular area of pixels. |
| * @param b |
| * the band. |
| * @param iArray |
| * the resulting integer array. |
| * @return the integer array of samples for the specified band of the |
| * specified rectangular area of pixels. |
| */ |
| 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); |
| } |
| |
| /** |
| * Gets the transfer type for pixels of this Raster. |
| * |
| * @see SampleModel#getTransferType() |
| * @return the transfer type for pixels of this Raster. |
| */ |
| public final int getTransferType() { |
| return sampleModel.getTransferType(); |
| } |
| |
| /** |
| * Gets the width of this Raster. |
| * |
| * @return the width of this Raster. |
| */ |
| public final int getWidth() { |
| return width; |
| } |
| |
| /** |
| * Validate data buffer. |
| * |
| * @param dataBuffer |
| * the data buffer. |
| * @param w |
| * the w. |
| * @param h |
| * the h. |
| * @param scanlineStride |
| * the scanline stride. |
| */ |
| private static void validateDataBuffer(final DataBuffer dataBuffer, final int w, final int h, |
| final int scanlineStride) { |
| if (dataBuffer.getSize() < (scanlineStride * (h - 1) + w - 1)) { |
| // awt.298=dataBuffer is too small |
| throw new RasterFormatException(Messages.getString("awt.298")); //$NON-NLS-1$ |
| } |
| } |
| } |