home *** CD-ROM | disk | FTP | other *** search
- package sun.awt.image;
-
- import java.awt.Point;
- import java.awt.Rectangle;
- import java.awt.image.DataBuffer;
- import java.awt.image.DataBufferInt;
- import java.awt.image.Raster;
- import java.awt.image.RasterFormatException;
- import java.awt.image.SampleModel;
- import java.awt.image.SinglePixelPackedSampleModel;
- import java.awt.image.WritableRaster;
-
- public class IntegerComponentRaster extends WritableRaster {
- static final int TYPE_CUSTOM = 0;
- static final int TYPE_BYTE_SAMPLES = 1;
- static final int TYPE_USHORT_SAMPLES = 2;
- static final int TYPE_INT_SAMPLES = 3;
- static final int TYPE_BYTE_BANDED_SAMPLES = 4;
- static final int TYPE_USHORT_BANDED_SAMPLES = 5;
- static final int TYPE_INT_BANDED_SAMPLES = 6;
- static final int TYPE_BYTE_PACKED_SAMPLES = 7;
- static final int TYPE_USHORT_PACKED_SAMPLES = 8;
- static final int TYPE_INT_PACKED_SAMPLES = 9;
- static final int TYPE_INT_8BIT_SAMPLES = 10;
- static final int TYPE_BYTE_BINARY_SAMPLES = 11;
- protected int bandOffset;
- protected int[] dataOffsets;
- protected int scanlineStride;
- protected int pixelStride;
- protected int[] data;
- protected int numDataElems;
- int type;
-
- private static native void initIDs();
-
- public IntegerComponentRaster(SampleModel var1, Point var2) {
- this(var1, var1.createDataBuffer(), new Rectangle(var2.x, var2.y, var1.getWidth(), var1.getHeight()), var2, (IntegerComponentRaster)null);
- }
-
- public IntegerComponentRaster(SampleModel var1, DataBuffer var2, Point var3) {
- this(var1, var2, new Rectangle(var3.x, var3.y, var1.getWidth(), var1.getHeight()), var3, (IntegerComponentRaster)null);
- }
-
- public IntegerComponentRaster(SampleModel var1, DataBuffer var2, Rectangle var3, Point var4, IntegerComponentRaster var5) {
- super(var1, var2, var3, var4, var5);
- if (!(var2 instanceof DataBufferInt)) {
- throw new RasterFormatException("IntegerComponentRasters must haveinteger DataBuffers");
- } else {
- DataBufferInt var6 = (DataBufferInt)var2;
- this.data = var6.getData();
- if (((DataBuffer)var6).getNumBanks() != 1) {
- throw new RasterFormatException("DataBuffer for IntegerComponentRasters must only have 1 bank.");
- } else if (var1 instanceof SinglePixelPackedSampleModel) {
- SinglePixelPackedSampleModel var7 = (SinglePixelPackedSampleModel)var1;
- int[] var8 = var7.getBitOffsets();
- boolean var9 = false;
-
- for(int var10 = 1; var10 < var8.length; ++var10) {
- if (var8[var10] % 8 != 0) {
- var9 = true;
- }
- }
-
- this.type = var9 ? 9 : 10;
- this.scanlineStride = var7.getScanlineStride();
- this.pixelStride = 1;
- this.dataOffsets = new int[1];
- this.dataOffsets[0] = ((DataBuffer)var6).getOffset();
- this.bandOffset = this.dataOffsets[0];
- int var11 = var3.x - var4.x;
- int var12 = var3.y - var4.y;
- int[] var10000 = this.dataOffsets;
- var10000[0] += var11 + var12 * this.scanlineStride;
- this.numDataElems = var7.getNumDataElements();
- this.verify(false);
- } else {
- throw new RasterFormatException("IntegerComponentRasters must have SinglePixelPackedSampleModel");
- }
- }
- }
-
- public int[] getDataOffsets() {
- return (int[])this.dataOffsets.clone();
- }
-
- public int getDataOffset(int var1) {
- return this.dataOffsets[var1];
- }
-
- public int getScanlineStride() {
- return this.scanlineStride;
- }
-
- public int getPixelStride() {
- return this.pixelStride;
- }
-
- public int[] getDataStorage() {
- return this.data;
- }
-
- public Object getDataElements(int var1, int var2, Object var3) {
- int[] var4;
- if (var3 == null) {
- var4 = new int[super.numDataElements];
- } else {
- var4 = (int[])var3;
- }
-
- int var5 = (var2 - super.minY) * this.scanlineStride + (var1 - super.minX) * this.pixelStride;
-
- for(int var6 = 0; var6 < super.numDataElements; ++var6) {
- var4[var6] = this.data[this.dataOffsets[var6] + var5];
- }
-
- return var4;
- }
-
- public Object getDataElements(int var1, int var2, int var3, int var4, Object var5) {
- int[] var6;
- if (var5 instanceof int[]) {
- var6 = (int[])var5;
- } else {
- var6 = new int[super.numDataElements * var3 * var4];
- }
-
- int var7 = (var2 - super.minY) * this.scanlineStride + (var1 - super.minX) * this.pixelStride;
- int var9 = 0;
-
- for(int var11 = 0; var11 < var4; var7 += this.scanlineStride) {
- int var8 = var7;
-
- for(int var10 = 0; var10 < var3; var8 += this.pixelStride) {
- for(int var12 = 0; var12 < super.numDataElements; ++var12) {
- var6[var9++] = this.data[this.dataOffsets[var12] + var8];
- }
-
- ++var10;
- }
-
- ++var11;
- }
-
- return var6;
- }
-
- public void setDataElements(int var1, int var2, Object var3) {
- int[] var4 = (int[])var3;
- int var5 = (var2 - super.minY) * this.scanlineStride + (var1 - super.minX) * this.pixelStride;
-
- for(int var6 = 0; var6 < super.numDataElements; ++var6) {
- this.data[this.dataOffsets[var6] + var5] = var4[var6];
- }
-
- }
-
- public void setDataElements(int var1, int var2, Raster var3) {
- int var4 = var3.getWidth();
- int var5 = var3.getHeight();
- int var6 = var3.getMinX();
- int var7 = var3.getMinY();
- Object var8 = null;
- if (var3 instanceof IntegerComponentRaster && this.pixelStride == 1 && super.numDataElements == 1) {
- IntegerComponentRaster var11 = (IntegerComponentRaster)var3;
- if (((Raster)var11).getNumDataElements() != 1) {
- throw new ArrayIndexOutOfBoundsException("Number of bands does not match");
- }
-
- int[] var17 = var11.getDataStorage();
- int var12 = var11.getScanlineStride();
- int var13 = var11.getDataOffset(0);
- int var14 = var13;
- int var15 = this.dataOffsets[0] + (var2 - super.minY) * this.scanlineStride + (var1 - super.minX);
- if (var11.getPixelStride() == this.pixelStride) {
- var4 *= this.pixelStride;
-
- for(int var19 = 0; var19 < var5; ++var19) {
- System.arraycopy(var17, var14, this.data, var15, var4);
- var14 += var12;
- var15 += this.scanlineStride;
- }
-
- return;
- }
- }
-
- boolean var9 = false;
- boolean var10 = false;
- Object var20 = null;
-
- for(int var18 = 0; var18 < var5; ++var18) {
- var20 = var3.getDataElements(var6, var7 + var18, var4, 1, var20);
- this.setDataElements(var1, var2 + var18, var4, 1, var20);
- }
-
- }
-
- public void setDataElements(int var1, int var2, int var3, int var4, Object var5) {
- int[] var6 = (int[])var5;
- int var7 = (var2 - super.minY) * this.scanlineStride + (var1 - super.minX) * this.pixelStride;
- int var9 = 0;
-
- for(int var11 = 0; var11 < var4; var7 += this.scanlineStride) {
- int var8 = var7;
-
- for(int var10 = 0; var10 < var3; var8 += this.pixelStride) {
- for(int var12 = 0; var12 < super.numDataElements; ++var12) {
- this.data[this.dataOffsets[var12] + var8] = var6[var9++];
- }
-
- ++var10;
- }
-
- ++var11;
- }
-
- }
-
- public WritableRaster createWritableChild(int var1, int var2, int var3, int var4, int var5, int var6, int[] var7) {
- if (var1 < super.minX) {
- throw new RasterFormatException("x lies outside raster");
- } else if (var2 < super.minY) {
- throw new RasterFormatException("y lies outside raster");
- } else if (var1 + var3 > super.width + super.minX) {
- throw new RasterFormatException("(x + width) is outside raster");
- } else if (var2 + var4 > super.height + super.minY) {
- throw new RasterFormatException("(y + height) is outside raster");
- } else {
- SampleModel var8;
- if (var7 != null) {
- var8 = super.sampleModel.createSubsetSampleModel(var7);
- } else {
- var8 = super.sampleModel;
- }
-
- int var9 = var5 - var1;
- int var10 = var6 - var2;
- return new IntegerComponentRaster(var8, super.dataBuffer, new Rectangle(var5, var6, var3, var4), new Point(super.sampleModelTranslateX + var9, super.sampleModelTranslateY + var10), this);
- }
- }
-
- public Raster createChild(int var1, int var2, int var3, int var4, int var5, int var6, int[] var7) {
- return this.createWritableChild(var1, var2, var3, var4, var5, var6, var7);
- }
-
- public WritableRaster createCompatibleWritableRaster(int var1, int var2) {
- if (var1 > 0 && var2 > 0) {
- SampleModel var3 = super.sampleModel.createCompatibleSampleModel(var1, var2);
- return new IntegerComponentRaster(var3, new Point(0, 0));
- } else {
- throw new RasterFormatException("negative " + (var1 <= 0 ? "width" : "height"));
- }
- }
-
- public WritableRaster createCompatibleWritableRaster() {
- return this.createCompatibleWritableRaster(super.width, super.height);
- }
-
- private void verify(boolean var1) {
- if (this.dataOffsets[0] < 0) {
- throw new RasterFormatException("Data offset (" + this.dataOffsets[0] + ") must be >= 0");
- } else {
- int var2 = 0;
-
- for(int var4 = 0; var4 < super.numDataElements; ++var4) {
- int var3 = (super.height - 1) * this.scanlineStride + (super.width - 1) * this.pixelStride + this.dataOffsets[var4];
- if (var3 > var2) {
- var2 = var3;
- }
- }
-
- if (this.data.length < var2) {
- throw new RasterFormatException("Data array too small (should be " + var2 + " but is " + this.data.length + " )");
- }
- }
- }
-
- public String toString() {
- return new String("IntegerComponentRaster: width = " + super.width + " height = " + super.height + " #Bands = " + super.numBands + " #DataElements " + super.numDataElements + " xOff = " + super.sampleModelTranslateX + " yOff = " + super.sampleModelTranslateY + " dataOffset[0] " + this.dataOffsets[0]);
- }
-
- static {
- NativeLibLoader.loadLibraries();
- initIDs();
- }
- }
-