home *** CD-ROM | disk | FTP | other *** search
- package java.awt.image;
-
- public class ComponentSampleModel extends SampleModel {
- protected int[] bandOffsets;
- protected int[] bankIndices;
- protected int numBands = 1;
- protected int numBanks = 1;
- protected int scanlineStride;
- protected int pixelStride;
-
- private static native void initIDs();
-
- public ComponentSampleModel(int var1, int var2, int var3, int var4, int var5, int[] var6) {
- super(var1, var2, var3, var6.length);
- super.dataType = var1;
- this.pixelStride = var4;
- this.scanlineStride = var5;
- this.bandOffsets = (int[])var6.clone();
- this.numBands = var6.length;
- if (var4 < 0) {
- throw new IllegalArgumentException("Pixel stride must be >= 0");
- } else if (var5 < 0) {
- throw new IllegalArgumentException("Scanline stride must be >= 0");
- } else if (this.numBands < 1) {
- throw new IllegalArgumentException("Must have at least one band.");
- } else {
- this.bankIndices = new int[this.numBands];
-
- for(int var7 = 0; var7 < this.numBands; ++var7) {
- this.bankIndices[var7] = 0;
- }
-
- }
- }
-
- public ComponentSampleModel(int var1, int var2, int var3, int var4, int var5, int[] var6, int[] var7) {
- super(var1, var2, var3, var7.length);
- super.dataType = var1;
- this.pixelStride = var4;
- this.scanlineStride = var5;
- this.bandOffsets = (int[])var7.clone();
- this.bankIndices = (int[])var6.clone();
- if (var4 < 0) {
- throw new IllegalArgumentException("Pixel stride must be >= 0");
- } else if (var5 < 0) {
- throw new IllegalArgumentException("Scanline stride must be >= 0");
- } else {
- int var8 = var6[0];
- if (var8 < 0) {
- throw new IllegalArgumentException("Index of bank 0 is less than 0 (" + var8 + ")");
- } else {
- for(int var9 = 1; var9 < var6.length; ++var9) {
- if (var6[var9] > var8) {
- var8 = var6[var9];
- } else if (var6[var9] < 0) {
- throw new IllegalArgumentException("Index of bank " + var9 + " is less than 0 (" + var8 + ")");
- }
- }
-
- this.numBanks = var8 + 1;
- this.numBands = var7.length;
- if (var7.length != var6.length) {
- throw new IllegalArgumentException("Length of bandOffsets must equal length of bankIndices.");
- }
- }
- }
- }
-
- private long getBufferSize() {
- int var1 = this.bandOffsets[0];
-
- for(int var2 = 1; var2 < this.bandOffsets.length; ++var2) {
- var1 = Math.max(var1, this.bandOffsets[var2]);
- }
-
- long var3 = 0L;
- if (var1 >= 0) {
- var3 += (long)(var1 + 1);
- }
-
- if (this.pixelStride > 0) {
- var3 += (long)(this.pixelStride * (super.width - 1));
- }
-
- if (this.scanlineStride > 0) {
- var3 += (long)(this.scanlineStride * (super.height - 1));
- }
-
- return var3;
- }
-
- int[] orderBands(int[] var1, int var2) {
- int[] var3 = new int[var1.length];
- int[] var4 = new int[var1.length];
-
- for(int var5 = 0; var5 < var3.length; var3[var5] = var5++) {
- }
-
- for(int var6 = 0; var6 < var4.length; ++var6) {
- int var7 = var6;
-
- for(int var8 = var6 + 1; var8 < var4.length; ++var8) {
- if (var1[var3[var7]] > var1[var3[var8]]) {
- var7 = var8;
- }
- }
-
- var4[var3[var7]] = var6 * var2;
- var3[var7] = var3[var6];
- }
-
- return var4;
- }
-
- public SampleModel createCompatibleSampleModel(int var1, int var2) {
- Object var3 = null;
- int var6 = this.bandOffsets[0];
- int var7 = this.bandOffsets[0];
-
- for(int var8 = 1; var8 < this.bandOffsets.length; ++var8) {
- var6 = Math.min(var6, this.bandOffsets[var8]);
- var7 = Math.max(var7, this.bandOffsets[var8]);
- }
-
- var7 -= var6;
- int var9 = this.bandOffsets.length;
- int var11 = Math.abs(this.pixelStride);
- int var12 = Math.abs(this.scanlineStride);
- int var13 = Math.abs(var7);
- int[] var10;
- if (var11 > var12) {
- if (var11 > var13) {
- if (var12 > var13) {
- var10 = new int[this.bandOffsets.length];
-
- for(int var14 = 0; var14 < var9; ++var14) {
- var10[var14] = this.bandOffsets[var14] - var6;
- }
-
- var12 = var13 + 1;
- var11 = var12 * var2;
- } else {
- var10 = this.orderBands(this.bandOffsets, var12 * var2);
- var11 = var9 * var12 * var2;
- }
- } else {
- var11 = var12 * var2;
- var10 = this.orderBands(this.bandOffsets, var11 * var1);
- }
- } else if (var11 > var13) {
- var10 = new int[this.bandOffsets.length];
-
- for(int var17 = 0; var17 < var9; ++var17) {
- var10[var17] = this.bandOffsets[var17] - var6;
- }
-
- var11 = var13 + 1;
- var12 = var11 * var1;
- } else if (var12 > var13) {
- var10 = this.orderBands(this.bandOffsets, var11 * var1);
- var12 = var9 * var11 * var1;
- } else {
- var12 = var11 * var1;
- var10 = this.orderBands(this.bandOffsets, var12 * var2);
- }
-
- int var18 = 0;
- if (this.scanlineStride < 0) {
- var18 += var12 * var2;
- var12 *= -1;
- }
-
- if (this.pixelStride < 0) {
- var18 += var11 * var1;
- var11 *= -1;
- }
-
- for(int var15 = 0; var15 < var9; ++var15) {
- var10[var15] += var18;
- }
-
- return new ComponentSampleModel(super.dataType, var1, var2, var11, var12, var10);
- }
-
- public SampleModel createSubsetSampleModel(int[] var1) {
- if (var1.length > this.bankIndices.length) {
- throw new RasterFormatException("There are only " + this.bankIndices.length + " bands");
- } else {
- int[] var2 = new int[var1.length];
- int[] var3 = new int[var1.length];
-
- for(int var4 = 0; var4 < var1.length; ++var4) {
- var2[var4] = this.bankIndices[var1[var4]];
- var3[var4] = this.bandOffsets[var1[var4]];
- }
-
- return new ComponentSampleModel(super.dataType, super.width, super.height, this.pixelStride, this.scanlineStride, var2, var3);
- }
- }
-
- public DataBuffer createDataBuffer() {
- Object var1 = null;
- int var2 = (int)this.getBufferSize();
- switch (super.dataType) {
- case 0:
- var1 = new DataBufferByte(var2, this.numBanks);
- break;
- case 1:
- var1 = new DataBufferUShort(var2, this.numBanks);
- break;
- case 2:
- var1 = new DataBufferShort(var2, this.numBanks);
- break;
- case 3:
- var1 = new DataBufferInt(var2, this.numBanks);
- }
-
- return (DataBuffer)var1;
- }
-
- public int getOffset(int var1, int var2) {
- int var3 = var2 * this.scanlineStride + var1 * this.pixelStride + this.bandOffsets[0];
- return var3;
- }
-
- public int getOffset(int var1, int var2, int var3) {
- int var4 = var2 * this.scanlineStride + var1 * this.pixelStride + this.bandOffsets[var3];
- return var4;
- }
-
- public final int[] getSampleSize() {
- int[] var1 = new int[this.numBands];
- int var2 = this.getSampleSize(0);
-
- for(int var3 = 0; var3 < this.numBands; ++var3) {
- var1[var3] = var2;
- }
-
- return var1;
- }
-
- public final int getSampleSize(int var1) {
- return DataBuffer.getDataTypeSize(super.dataType);
- }
-
- public final int[] getBankIndices() {
- return (int[])this.bankIndices.clone();
- }
-
- public final int[] getBandOffsets() {
- return (int[])this.bandOffsets.clone();
- }
-
- public final int getScanlineStride() {
- return this.scanlineStride;
- }
-
- public final int getPixelStride() {
- return this.pixelStride;
- }
-
- public final int getNumDataElements() {
- return ((SampleModel)this).getNumBands();
- }
-
- public Object getDataElements(int var1, int var2, Object var3, DataBuffer var4) {
- int var5 = ((SampleModel)this).getTransferType();
- int var6 = this.getNumDataElements();
- int var7 = var2 * this.scanlineStride + var1 * this.pixelStride;
- switch (var5) {
- case 0:
- byte[] var8;
- if (var3 == null) {
- var8 = new byte[var6];
- } else {
- var8 = (byte[])var3;
- }
-
- for(int var9 = 0; var9 < var6; ++var9) {
- var8[var9] = (byte)var4.getElem(this.bankIndices[var9], var7 + this.bandOffsets[var9]);
- }
-
- var3 = var8;
- break;
- case 1:
- case 2:
- short[] var10;
- if (var3 == null) {
- var10 = new short[var6];
- } else {
- var10 = (short[])var3;
- }
-
- for(int var11 = 0; var11 < var6; ++var11) {
- var10[var11] = (short)var4.getElem(this.bankIndices[var11], var7 + this.bandOffsets[var11]);
- }
-
- var3 = var10;
- break;
- case 3:
- int[] var12;
- if (var3 == null) {
- var12 = new int[var6];
- } else {
- var12 = (int[])var3;
- }
-
- for(int var13 = 0; var13 < var6; ++var13) {
- var12[var13] = var4.getElem(this.bankIndices[var13], var7 + this.bandOffsets[var13]);
- }
-
- var3 = var12;
- }
-
- return var3;
- }
-
- public int[] getPixel(int var1, int var2, int[] var3, DataBuffer var4) {
- int[] var5;
- if (var3 != null) {
- var5 = var3;
- } else {
- var5 = new int[this.numBands];
- }
-
- int var6 = var2 * this.scanlineStride + var1 * this.pixelStride;
-
- for(int var7 = 0; var7 < this.numBands; ++var7) {
- var5[var7] = var4.getElem(this.bankIndices[var7], var6 + this.bandOffsets[var7]);
- }
-
- return var5;
- }
-
- public int[] getPixels(int var1, int var2, int var3, int var4, int[] var5, DataBuffer var6) {
- int[] var7;
- if (var5 != null) {
- var7 = var5;
- } else {
- var7 = new int[var3 * var4 * this.numBands];
- }
-
- int var8 = var2 * this.scanlineStride + var1 * this.pixelStride;
- int var9 = 0;
-
- for(int var10 = 0; var10 < var4; ++var10) {
- int var11 = var8;
-
- for(int var12 = 0; var12 < var3; ++var12) {
- for(int var13 = 0; var13 < this.numBands; ++var13) {
- var7[var9++] = var6.getElem(this.bankIndices[var13], var11 + this.bandOffsets[var13]);
- }
-
- var11 += this.pixelStride;
- }
-
- var8 += this.scanlineStride;
- }
-
- return var7;
- }
-
- public int getSample(int var1, int var2, int var3, DataBuffer var4) {
- int var5 = var4.getElem(this.bankIndices[var3], var2 * this.scanlineStride + var1 * this.pixelStride + this.bandOffsets[var3]);
- return var5;
- }
-
- public float getSampleFloat(int var1, int var2, int var3, DataBuffer var4) {
- float var5 = var4.getElemFloat(this.bankIndices[var3], var2 * this.scanlineStride + var1 * this.pixelStride + this.bandOffsets[var3]);
- return var5;
- }
-
- public double getSampleDouble(int var1, int var2, int var3, DataBuffer var4) {
- double var5 = var4.getElemDouble(this.bankIndices[var3], var2 * this.scanlineStride + var1 * this.pixelStride + this.bandOffsets[var3]);
- return var5;
- }
-
- public int[] getSamples(int var1, int var2, int var3, int var4, int var5, int[] var6, DataBuffer var7) {
- int[] var8;
- if (var6 != null) {
- var8 = var6;
- } else {
- var8 = new int[var3 * var4];
- }
-
- int var9 = var2 * this.scanlineStride + var1 * this.pixelStride + this.bandOffsets[var5];
- int var10 = 0;
-
- for(int var11 = 0; var11 < var4; ++var11) {
- int var12 = var9;
-
- for(int var13 = 0; var13 < var3; ++var13) {
- var8[var10++] = var7.getElem(this.bankIndices[var5], var12);
- var12 += this.pixelStride;
- }
-
- var9 += this.scanlineStride;
- }
-
- return var8;
- }
-
- public void setDataElements(int var1, int var2, Object var3, DataBuffer var4) {
- int var5 = ((SampleModel)this).getTransferType();
- int var6 = this.getNumDataElements();
- int var7 = var2 * this.scanlineStride + var1 * this.pixelStride;
- switch (var5) {
- case 0:
- byte[] var8 = (byte[])var3;
-
- for(int var9 = 0; var9 < var6; ++var9) {
- var4.setElem(this.bankIndices[var9], var7 + this.bandOffsets[var9], var8[var9] & 255);
- }
- break;
- case 1:
- case 2:
- short[] var10 = (short[])var3;
-
- for(int var11 = 0; var11 < var6; ++var11) {
- var4.setElem(this.bankIndices[var11], var7 + this.bandOffsets[var11], var10[var11] & '\uffff');
- }
- break;
- case 3:
- int[] var12 = (int[])var3;
-
- for(int var13 = 0; var13 < var6; ++var13) {
- var4.setElem(this.bankIndices[var13], var7 + this.bandOffsets[var13], var12[var13]);
- }
- break;
- case 4:
- float[] var14 = (float[])var3;
-
- for(int var15 = 0; var15 < var6; ++var15) {
- var4.setElemFloat(this.bankIndices[var15], var7 + this.bandOffsets[var15], var14[var15]);
- }
- break;
- case 5:
- double[] var16 = (double[])var3;
-
- for(int var17 = 0; var17 < var6; ++var17) {
- var4.setElemDouble(this.bankIndices[var17], var7 + this.bandOffsets[var17], var16[var17]);
- }
- }
-
- }
-
- public void setPixel(int var1, int var2, int[] var3, DataBuffer var4) {
- int var5 = var2 * this.scanlineStride + var1 * this.pixelStride;
-
- for(int var6 = 0; var6 < this.numBands; ++var6) {
- var4.setElem(this.bankIndices[var6], var5 + this.bandOffsets[var6], var3[var6]);
- }
-
- }
-
- public void setPixels(int var1, int var2, int var3, int var4, int[] var5, DataBuffer var6) {
- int var7 = var2 * this.scanlineStride + var1 * this.pixelStride;
- int var8 = 0;
-
- for(int var9 = 0; var9 < var4; ++var9) {
- int var10 = var7;
-
- for(int var11 = 0; var11 < var3; ++var11) {
- for(int var12 = 0; var12 < this.numBands; ++var12) {
- var6.setElem(this.bankIndices[var12], var10 + this.bandOffsets[var12], var5[var8++]);
- }
-
- var10 += this.pixelStride;
- }
-
- var7 += this.scanlineStride;
- }
-
- }
-
- public void setSample(int var1, int var2, int var3, int var4, DataBuffer var5) {
- var5.setElem(this.bankIndices[var3], var2 * this.scanlineStride + var1 * this.pixelStride + this.bandOffsets[var3], var4);
- }
-
- public void setSample(int var1, int var2, int var3, float var4, DataBuffer var5) {
- var5.setElemFloat(this.bankIndices[var3], var2 * this.scanlineStride + var1 * this.pixelStride + this.bandOffsets[var3], var4);
- }
-
- public void setSample(int var1, int var2, int var3, double var4, DataBuffer var6) {
- var6.setElemDouble(this.bankIndices[var3], var2 * this.scanlineStride + var1 * this.pixelStride + this.bandOffsets[var3], var4);
- }
-
- public void setSamples(int var1, int var2, int var3, int var4, int var5, int[] var6, DataBuffer var7) {
- int var8 = var2 * this.scanlineStride + var1 * this.pixelStride + this.bandOffsets[var5];
- int var9 = 0;
-
- for(int var10 = 0; var10 < var4; ++var10) {
- int var11 = var8;
-
- for(int var12 = 0; var12 < var3; ++var12) {
- var7.setElem(this.bankIndices[var5], var11, var6[var9++]);
- var11 += this.pixelStride;
- }
-
- var8 += this.scanlineStride;
- }
-
- }
-
- static {
- ColorModel.loadLibraries();
- initIDs();
- }
- }
-