| /* |
| * 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. |
| */ |
| 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 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 Raste. 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 indicies. |
| * |
| * @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 int 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 int array where the result array will be stored. |
| * |
| * @return the int 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 int 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 int 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 int. |
| * |
| * @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 int. |
| */ |
| 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 int array of samples for the specified band |
| * of the specified rectangular area of pixels in this Raster |
| * as a int 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 int array. |
| * |
| * @return the int 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$ |
| } |
| } |
| } |
| |
| |