home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &… the Search for Life CD 3 / 0_CD-ROM.iso / install / jre1_3 / lib / rt.jar / sun / awt / image / IntegerComponentRaster.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  6.2 KB  |  287 lines

  1. package sun.awt.image;
  2.  
  3. import java.awt.Point;
  4. import java.awt.Rectangle;
  5. import java.awt.image.DataBuffer;
  6. import java.awt.image.DataBufferInt;
  7. import java.awt.image.Raster;
  8. import java.awt.image.RasterFormatException;
  9. import java.awt.image.SampleModel;
  10. import java.awt.image.SinglePixelPackedSampleModel;
  11. import java.awt.image.WritableRaster;
  12.  
  13. public class IntegerComponentRaster extends WritableRaster {
  14.    static final int TYPE_CUSTOM = 0;
  15.    static final int TYPE_BYTE_SAMPLES = 1;
  16.    static final int TYPE_USHORT_SAMPLES = 2;
  17.    static final int TYPE_INT_SAMPLES = 3;
  18.    static final int TYPE_BYTE_BANDED_SAMPLES = 4;
  19.    static final int TYPE_USHORT_BANDED_SAMPLES = 5;
  20.    static final int TYPE_INT_BANDED_SAMPLES = 6;
  21.    static final int TYPE_BYTE_PACKED_SAMPLES = 7;
  22.    static final int TYPE_USHORT_PACKED_SAMPLES = 8;
  23.    static final int TYPE_INT_PACKED_SAMPLES = 9;
  24.    static final int TYPE_INT_8BIT_SAMPLES = 10;
  25.    static final int TYPE_BYTE_BINARY_SAMPLES = 11;
  26.    protected int bandOffset;
  27.    protected int[] dataOffsets;
  28.    protected int scanlineStride;
  29.    protected int pixelStride;
  30.    protected int[] data;
  31.    protected int numDataElems;
  32.    int type;
  33.  
  34.    private static native void initIDs();
  35.  
  36.    public IntegerComponentRaster(SampleModel var1, Point var2) {
  37.       this(var1, var1.createDataBuffer(), new Rectangle(var2.x, var2.y, var1.getWidth(), var1.getHeight()), var2, (IntegerComponentRaster)null);
  38.    }
  39.  
  40.    public IntegerComponentRaster(SampleModel var1, DataBuffer var2, Point var3) {
  41.       this(var1, var2, new Rectangle(var3.x, var3.y, var1.getWidth(), var1.getHeight()), var3, (IntegerComponentRaster)null);
  42.    }
  43.  
  44.    public IntegerComponentRaster(SampleModel var1, DataBuffer var2, Rectangle var3, Point var4, IntegerComponentRaster var5) {
  45.       super(var1, var2, var3, var4, var5);
  46.       if (!(var2 instanceof DataBufferInt)) {
  47.          throw new RasterFormatException("IntegerComponentRasters must haveinteger DataBuffers");
  48.       } else {
  49.          DataBufferInt var6 = (DataBufferInt)var2;
  50.          this.data = var6.getData();
  51.          if (((DataBuffer)var6).getNumBanks() != 1) {
  52.             throw new RasterFormatException("DataBuffer for IntegerComponentRasters must only have 1 bank.");
  53.          } else if (var1 instanceof SinglePixelPackedSampleModel) {
  54.             SinglePixelPackedSampleModel var7 = (SinglePixelPackedSampleModel)var1;
  55.             int[] var8 = var7.getBitOffsets();
  56.             boolean var9 = false;
  57.  
  58.             for(int var10 = 1; var10 < var8.length; ++var10) {
  59.                if (var8[var10] % 8 != 0) {
  60.                   var9 = true;
  61.                }
  62.             }
  63.  
  64.             this.type = var9 ? 9 : 10;
  65.             this.scanlineStride = var7.getScanlineStride();
  66.             this.pixelStride = 1;
  67.             this.dataOffsets = new int[1];
  68.             this.dataOffsets[0] = ((DataBuffer)var6).getOffset();
  69.             this.bandOffset = this.dataOffsets[0];
  70.             int var11 = var3.x - var4.x;
  71.             int var12 = var3.y - var4.y;
  72.             int[] var10000 = this.dataOffsets;
  73.             var10000[0] += var11 + var12 * this.scanlineStride;
  74.             this.numDataElems = var7.getNumDataElements();
  75.             this.verify(false);
  76.          } else {
  77.             throw new RasterFormatException("IntegerComponentRasters must have SinglePixelPackedSampleModel");
  78.          }
  79.       }
  80.    }
  81.  
  82.    public int[] getDataOffsets() {
  83.       return (int[])this.dataOffsets.clone();
  84.    }
  85.  
  86.    public int getDataOffset(int var1) {
  87.       return this.dataOffsets[var1];
  88.    }
  89.  
  90.    public int getScanlineStride() {
  91.       return this.scanlineStride;
  92.    }
  93.  
  94.    public int getPixelStride() {
  95.       return this.pixelStride;
  96.    }
  97.  
  98.    public int[] getDataStorage() {
  99.       return this.data;
  100.    }
  101.  
  102.    public Object getDataElements(int var1, int var2, Object var3) {
  103.       int[] var4;
  104.       if (var3 == null) {
  105.          var4 = new int[super.numDataElements];
  106.       } else {
  107.          var4 = (int[])var3;
  108.       }
  109.  
  110.       int var5 = (var2 - super.minY) * this.scanlineStride + (var1 - super.minX) * this.pixelStride;
  111.  
  112.       for(int var6 = 0; var6 < super.numDataElements; ++var6) {
  113.          var4[var6] = this.data[this.dataOffsets[var6] + var5];
  114.       }
  115.  
  116.       return var4;
  117.    }
  118.  
  119.    public Object getDataElements(int var1, int var2, int var3, int var4, Object var5) {
  120.       int[] var6;
  121.       if (var5 instanceof int[]) {
  122.          var6 = (int[])var5;
  123.       } else {
  124.          var6 = new int[super.numDataElements * var3 * var4];
  125.       }
  126.  
  127.       int var7 = (var2 - super.minY) * this.scanlineStride + (var1 - super.minX) * this.pixelStride;
  128.       int var9 = 0;
  129.  
  130.       for(int var11 = 0; var11 < var4; var7 += this.scanlineStride) {
  131.          int var8 = var7;
  132.  
  133.          for(int var10 = 0; var10 < var3; var8 += this.pixelStride) {
  134.             for(int var12 = 0; var12 < super.numDataElements; ++var12) {
  135.                var6[var9++] = this.data[this.dataOffsets[var12] + var8];
  136.             }
  137.  
  138.             ++var10;
  139.          }
  140.  
  141.          ++var11;
  142.       }
  143.  
  144.       return var6;
  145.    }
  146.  
  147.    public void setDataElements(int var1, int var2, Object var3) {
  148.       int[] var4 = (int[])var3;
  149.       int var5 = (var2 - super.minY) * this.scanlineStride + (var1 - super.minX) * this.pixelStride;
  150.  
  151.       for(int var6 = 0; var6 < super.numDataElements; ++var6) {
  152.          this.data[this.dataOffsets[var6] + var5] = var4[var6];
  153.       }
  154.  
  155.    }
  156.  
  157.    public void setDataElements(int var1, int var2, Raster var3) {
  158.       int var4 = var3.getWidth();
  159.       int var5 = var3.getHeight();
  160.       int var6 = var3.getMinX();
  161.       int var7 = var3.getMinY();
  162.       Object var8 = null;
  163.       if (var3 instanceof IntegerComponentRaster && this.pixelStride == 1 && super.numDataElements == 1) {
  164.          IntegerComponentRaster var11 = (IntegerComponentRaster)var3;
  165.          if (((Raster)var11).getNumDataElements() != 1) {
  166.             throw new ArrayIndexOutOfBoundsException("Number of bands does not match");
  167.          }
  168.  
  169.          int[] var17 = var11.getDataStorage();
  170.          int var12 = var11.getScanlineStride();
  171.          int var13 = var11.getDataOffset(0);
  172.          int var14 = var13;
  173.          int var15 = this.dataOffsets[0] + (var2 - super.minY) * this.scanlineStride + (var1 - super.minX);
  174.          if (var11.getPixelStride() == this.pixelStride) {
  175.             var4 *= this.pixelStride;
  176.  
  177.             for(int var19 = 0; var19 < var5; ++var19) {
  178.                System.arraycopy(var17, var14, this.data, var15, var4);
  179.                var14 += var12;
  180.                var15 += this.scanlineStride;
  181.             }
  182.  
  183.             return;
  184.          }
  185.       }
  186.  
  187.       boolean var9 = false;
  188.       boolean var10 = false;
  189.       Object var20 = null;
  190.  
  191.       for(int var18 = 0; var18 < var5; ++var18) {
  192.          var20 = var3.getDataElements(var6, var7 + var18, var4, 1, var20);
  193.          this.setDataElements(var1, var2 + var18, var4, 1, var20);
  194.       }
  195.  
  196.    }
  197.  
  198.    public void setDataElements(int var1, int var2, int var3, int var4, Object var5) {
  199.       int[] var6 = (int[])var5;
  200.       int var7 = (var2 - super.minY) * this.scanlineStride + (var1 - super.minX) * this.pixelStride;
  201.       int var9 = 0;
  202.  
  203.       for(int var11 = 0; var11 < var4; var7 += this.scanlineStride) {
  204.          int var8 = var7;
  205.  
  206.          for(int var10 = 0; var10 < var3; var8 += this.pixelStride) {
  207.             for(int var12 = 0; var12 < super.numDataElements; ++var12) {
  208.                this.data[this.dataOffsets[var12] + var8] = var6[var9++];
  209.             }
  210.  
  211.             ++var10;
  212.          }
  213.  
  214.          ++var11;
  215.       }
  216.  
  217.    }
  218.  
  219.    public WritableRaster createWritableChild(int var1, int var2, int var3, int var4, int var5, int var6, int[] var7) {
  220.       if (var1 < super.minX) {
  221.          throw new RasterFormatException("x lies outside raster");
  222.       } else if (var2 < super.minY) {
  223.          throw new RasterFormatException("y lies outside raster");
  224.       } else if (var1 + var3 > super.width + super.minX) {
  225.          throw new RasterFormatException("(x + width) is outside raster");
  226.       } else if (var2 + var4 > super.height + super.minY) {
  227.          throw new RasterFormatException("(y + height) is outside raster");
  228.       } else {
  229.          SampleModel var8;
  230.          if (var7 != null) {
  231.             var8 = super.sampleModel.createSubsetSampleModel(var7);
  232.          } else {
  233.             var8 = super.sampleModel;
  234.          }
  235.  
  236.          int var9 = var5 - var1;
  237.          int var10 = var6 - var2;
  238.          return new IntegerComponentRaster(var8, super.dataBuffer, new Rectangle(var5, var6, var3, var4), new Point(super.sampleModelTranslateX + var9, super.sampleModelTranslateY + var10), this);
  239.       }
  240.    }
  241.  
  242.    public Raster createChild(int var1, int var2, int var3, int var4, int var5, int var6, int[] var7) {
  243.       return this.createWritableChild(var1, var2, var3, var4, var5, var6, var7);
  244.    }
  245.  
  246.    public WritableRaster createCompatibleWritableRaster(int var1, int var2) {
  247.       if (var1 > 0 && var2 > 0) {
  248.          SampleModel var3 = super.sampleModel.createCompatibleSampleModel(var1, var2);
  249.          return new IntegerComponentRaster(var3, new Point(0, 0));
  250.       } else {
  251.          throw new RasterFormatException("negative " + (var1 <= 0 ? "width" : "height"));
  252.       }
  253.    }
  254.  
  255.    public WritableRaster createCompatibleWritableRaster() {
  256.       return this.createCompatibleWritableRaster(super.width, super.height);
  257.    }
  258.  
  259.    private void verify(boolean var1) {
  260.       if (this.dataOffsets[0] < 0) {
  261.          throw new RasterFormatException("Data offset (" + this.dataOffsets[0] + ") must be >= 0");
  262.       } else {
  263.          int var2 = 0;
  264.  
  265.          for(int var4 = 0; var4 < super.numDataElements; ++var4) {
  266.             int var3 = (super.height - 1) * this.scanlineStride + (super.width - 1) * this.pixelStride + this.dataOffsets[var4];
  267.             if (var3 > var2) {
  268.                var2 = var3;
  269.             }
  270.          }
  271.  
  272.          if (this.data.length < var2) {
  273.             throw new RasterFormatException("Data array too small (should be " + var2 + " but is " + this.data.length + " )");
  274.          }
  275.       }
  276.    }
  277.  
  278.    public String toString() {
  279.       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]);
  280.    }
  281.  
  282.    static {
  283.       NativeLibLoader.loadLibraries();
  284.       initIDs();
  285.    }
  286. }
  287.