home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / java / awt / image / ComponentSampleModel.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  6.5 KB  |  510 lines

  1. package java.awt.image;
  2.  
  3. public class ComponentSampleModel extends SampleModel {
  4.    protected int[] bandOffsets;
  5.    protected int[] bankIndices;
  6.    protected int numBands = 1;
  7.    protected int numBanks = 1;
  8.    protected int scanlineStride;
  9.    protected int pixelStride;
  10.  
  11.    private static native void initIDs();
  12.  
  13.    public ComponentSampleModel(int var1, int var2, int var3, int var4, int var5, int[] var6) {
  14.       super(var1, var2, var3, var6.length);
  15.       super.dataType = var1;
  16.       this.pixelStride = var4;
  17.       this.scanlineStride = var5;
  18.       this.bandOffsets = (int[])var6.clone();
  19.       this.numBands = var6.length;
  20.       if (var4 < 0) {
  21.          throw new IllegalArgumentException("Pixel stride must be >= 0");
  22.       } else if (var5 < 0) {
  23.          throw new IllegalArgumentException("Scanline stride must be >= 0");
  24.       } else if (this.numBands < 1) {
  25.          throw new IllegalArgumentException("Must have at least one band.");
  26.       } else {
  27.          this.bankIndices = new int[this.numBands];
  28.  
  29.          for(int var7 = 0; var7 < this.numBands; ++var7) {
  30.             this.bankIndices[var7] = 0;
  31.          }
  32.  
  33.       }
  34.    }
  35.  
  36.    public ComponentSampleModel(int var1, int var2, int var3, int var4, int var5, int[] var6, int[] var7) {
  37.       super(var1, var2, var3, var7.length);
  38.       super.dataType = var1;
  39.       this.pixelStride = var4;
  40.       this.scanlineStride = var5;
  41.       this.bandOffsets = (int[])var7.clone();
  42.       this.bankIndices = (int[])var6.clone();
  43.       if (var4 < 0) {
  44.          throw new IllegalArgumentException("Pixel stride must be >= 0");
  45.       } else if (var5 < 0) {
  46.          throw new IllegalArgumentException("Scanline stride must be >= 0");
  47.       } else {
  48.          int var8 = var6[0];
  49.          if (var8 < 0) {
  50.             throw new IllegalArgumentException("Index of bank 0 is less than 0 (" + var8 + ")");
  51.          } else {
  52.             for(int var9 = 1; var9 < var6.length; ++var9) {
  53.                if (var6[var9] > var8) {
  54.                   var8 = var6[var9];
  55.                } else if (var6[var9] < 0) {
  56.                   throw new IllegalArgumentException("Index of bank " + var9 + " is less than 0 (" + var8 + ")");
  57.                }
  58.             }
  59.  
  60.             this.numBanks = var8 + 1;
  61.             this.numBands = var7.length;
  62.             if (var7.length != var6.length) {
  63.                throw new IllegalArgumentException("Length of bandOffsets must equal length of bankIndices.");
  64.             }
  65.          }
  66.       }
  67.    }
  68.  
  69.    private long getBufferSize() {
  70.       int var1 = this.bandOffsets[0];
  71.  
  72.       for(int var2 = 1; var2 < this.bandOffsets.length; ++var2) {
  73.          var1 = Math.max(var1, this.bandOffsets[var2]);
  74.       }
  75.  
  76.       long var3 = 0L;
  77.       if (var1 >= 0) {
  78.          var3 += (long)(var1 + 1);
  79.       }
  80.  
  81.       if (this.pixelStride > 0) {
  82.          var3 += (long)(this.pixelStride * (super.width - 1));
  83.       }
  84.  
  85.       if (this.scanlineStride > 0) {
  86.          var3 += (long)(this.scanlineStride * (super.height - 1));
  87.       }
  88.  
  89.       return var3;
  90.    }
  91.  
  92.    int[] orderBands(int[] var1, int var2) {
  93.       int[] var3 = new int[var1.length];
  94.       int[] var4 = new int[var1.length];
  95.  
  96.       for(int var5 = 0; var5 < var3.length; var3[var5] = var5++) {
  97.       }
  98.  
  99.       for(int var6 = 0; var6 < var4.length; ++var6) {
  100.          int var7 = var6;
  101.  
  102.          for(int var8 = var6 + 1; var8 < var4.length; ++var8) {
  103.             if (var1[var3[var7]] > var1[var3[var8]]) {
  104.                var7 = var8;
  105.             }
  106.          }
  107.  
  108.          var4[var3[var7]] = var6 * var2;
  109.          var3[var7] = var3[var6];
  110.       }
  111.  
  112.       return var4;
  113.    }
  114.  
  115.    public SampleModel createCompatibleSampleModel(int var1, int var2) {
  116.       Object var3 = null;
  117.       int var6 = this.bandOffsets[0];
  118.       int var7 = this.bandOffsets[0];
  119.  
  120.       for(int var8 = 1; var8 < this.bandOffsets.length; ++var8) {
  121.          var6 = Math.min(var6, this.bandOffsets[var8]);
  122.          var7 = Math.max(var7, this.bandOffsets[var8]);
  123.       }
  124.  
  125.       var7 -= var6;
  126.       int var9 = this.bandOffsets.length;
  127.       int var11 = Math.abs(this.pixelStride);
  128.       int var12 = Math.abs(this.scanlineStride);
  129.       int var13 = Math.abs(var7);
  130.       int[] var10;
  131.       if (var11 > var12) {
  132.          if (var11 > var13) {
  133.             if (var12 > var13) {
  134.                var10 = new int[this.bandOffsets.length];
  135.  
  136.                for(int var14 = 0; var14 < var9; ++var14) {
  137.                   var10[var14] = this.bandOffsets[var14] - var6;
  138.                }
  139.  
  140.                var12 = var13 + 1;
  141.                var11 = var12 * var2;
  142.             } else {
  143.                var10 = this.orderBands(this.bandOffsets, var12 * var2);
  144.                var11 = var9 * var12 * var2;
  145.             }
  146.          } else {
  147.             var11 = var12 * var2;
  148.             var10 = this.orderBands(this.bandOffsets, var11 * var1);
  149.          }
  150.       } else if (var11 > var13) {
  151.          var10 = new int[this.bandOffsets.length];
  152.  
  153.          for(int var17 = 0; var17 < var9; ++var17) {
  154.             var10[var17] = this.bandOffsets[var17] - var6;
  155.          }
  156.  
  157.          var11 = var13 + 1;
  158.          var12 = var11 * var1;
  159.       } else if (var12 > var13) {
  160.          var10 = this.orderBands(this.bandOffsets, var11 * var1);
  161.          var12 = var9 * var11 * var1;
  162.       } else {
  163.          var12 = var11 * var1;
  164.          var10 = this.orderBands(this.bandOffsets, var12 * var2);
  165.       }
  166.  
  167.       int var18 = 0;
  168.       if (this.scanlineStride < 0) {
  169.          var18 += var12 * var2;
  170.          var12 *= -1;
  171.       }
  172.  
  173.       if (this.pixelStride < 0) {
  174.          var18 += var11 * var1;
  175.          var11 *= -1;
  176.       }
  177.  
  178.       for(int var15 = 0; var15 < var9; ++var15) {
  179.          var10[var15] += var18;
  180.       }
  181.  
  182.       return new ComponentSampleModel(super.dataType, var1, var2, var11, var12, var10);
  183.    }
  184.  
  185.    public SampleModel createSubsetSampleModel(int[] var1) {
  186.       if (var1.length > this.bankIndices.length) {
  187.          throw new RasterFormatException("There are only " + this.bankIndices.length + " bands");
  188.       } else {
  189.          int[] var2 = new int[var1.length];
  190.          int[] var3 = new int[var1.length];
  191.  
  192.          for(int var4 = 0; var4 < var1.length; ++var4) {
  193.             var2[var4] = this.bankIndices[var1[var4]];
  194.             var3[var4] = this.bandOffsets[var1[var4]];
  195.          }
  196.  
  197.          return new ComponentSampleModel(super.dataType, super.width, super.height, this.pixelStride, this.scanlineStride, var2, var3);
  198.       }
  199.    }
  200.  
  201.    public DataBuffer createDataBuffer() {
  202.       Object var1 = null;
  203.       int var2 = (int)this.getBufferSize();
  204.       switch (super.dataType) {
  205.          case 0:
  206.             var1 = new DataBufferByte(var2, this.numBanks);
  207.             break;
  208.          case 1:
  209.             var1 = new DataBufferUShort(var2, this.numBanks);
  210.             break;
  211.          case 2:
  212.             var1 = new DataBufferShort(var2, this.numBanks);
  213.             break;
  214.          case 3:
  215.             var1 = new DataBufferInt(var2, this.numBanks);
  216.       }
  217.  
  218.       return (DataBuffer)var1;
  219.    }
  220.  
  221.    public int getOffset(int var1, int var2) {
  222.       int var3 = var2 * this.scanlineStride + var1 * this.pixelStride + this.bandOffsets[0];
  223.       return var3;
  224.    }
  225.  
  226.    public int getOffset(int var1, int var2, int var3) {
  227.       int var4 = var2 * this.scanlineStride + var1 * this.pixelStride + this.bandOffsets[var3];
  228.       return var4;
  229.    }
  230.  
  231.    public final int[] getSampleSize() {
  232.       int[] var1 = new int[this.numBands];
  233.       int var2 = this.getSampleSize(0);
  234.  
  235.       for(int var3 = 0; var3 < this.numBands; ++var3) {
  236.          var1[var3] = var2;
  237.       }
  238.  
  239.       return var1;
  240.    }
  241.  
  242.    public final int getSampleSize(int var1) {
  243.       return DataBuffer.getDataTypeSize(super.dataType);
  244.    }
  245.  
  246.    public final int[] getBankIndices() {
  247.       return (int[])this.bankIndices.clone();
  248.    }
  249.  
  250.    public final int[] getBandOffsets() {
  251.       return (int[])this.bandOffsets.clone();
  252.    }
  253.  
  254.    public final int getScanlineStride() {
  255.       return this.scanlineStride;
  256.    }
  257.  
  258.    public final int getPixelStride() {
  259.       return this.pixelStride;
  260.    }
  261.  
  262.    public final int getNumDataElements() {
  263.       return ((SampleModel)this).getNumBands();
  264.    }
  265.  
  266.    public Object getDataElements(int var1, int var2, Object var3, DataBuffer var4) {
  267.       int var5 = ((SampleModel)this).getTransferType();
  268.       int var6 = this.getNumDataElements();
  269.       int var7 = var2 * this.scanlineStride + var1 * this.pixelStride;
  270.       switch (var5) {
  271.          case 0:
  272.             byte[] var8;
  273.             if (var3 == null) {
  274.                var8 = new byte[var6];
  275.             } else {
  276.                var8 = (byte[])var3;
  277.             }
  278.  
  279.             for(int var9 = 0; var9 < var6; ++var9) {
  280.                var8[var9] = (byte)var4.getElem(this.bankIndices[var9], var7 + this.bandOffsets[var9]);
  281.             }
  282.  
  283.             var3 = var8;
  284.             break;
  285.          case 1:
  286.          case 2:
  287.             short[] var10;
  288.             if (var3 == null) {
  289.                var10 = new short[var6];
  290.             } else {
  291.                var10 = (short[])var3;
  292.             }
  293.  
  294.             for(int var11 = 0; var11 < var6; ++var11) {
  295.                var10[var11] = (short)var4.getElem(this.bankIndices[var11], var7 + this.bandOffsets[var11]);
  296.             }
  297.  
  298.             var3 = var10;
  299.             break;
  300.          case 3:
  301.             int[] var12;
  302.             if (var3 == null) {
  303.                var12 = new int[var6];
  304.             } else {
  305.                var12 = (int[])var3;
  306.             }
  307.  
  308.             for(int var13 = 0; var13 < var6; ++var13) {
  309.                var12[var13] = var4.getElem(this.bankIndices[var13], var7 + this.bandOffsets[var13]);
  310.             }
  311.  
  312.             var3 = var12;
  313.       }
  314.  
  315.       return var3;
  316.    }
  317.  
  318.    public int[] getPixel(int var1, int var2, int[] var3, DataBuffer var4) {
  319.       int[] var5;
  320.       if (var3 != null) {
  321.          var5 = var3;
  322.       } else {
  323.          var5 = new int[this.numBands];
  324.       }
  325.  
  326.       int var6 = var2 * this.scanlineStride + var1 * this.pixelStride;
  327.  
  328.       for(int var7 = 0; var7 < this.numBands; ++var7) {
  329.          var5[var7] = var4.getElem(this.bankIndices[var7], var6 + this.bandOffsets[var7]);
  330.       }
  331.  
  332.       return var5;
  333.    }
  334.  
  335.    public int[] getPixels(int var1, int var2, int var3, int var4, int[] var5, DataBuffer var6) {
  336.       int[] var7;
  337.       if (var5 != null) {
  338.          var7 = var5;
  339.       } else {
  340.          var7 = new int[var3 * var4 * this.numBands];
  341.       }
  342.  
  343.       int var8 = var2 * this.scanlineStride + var1 * this.pixelStride;
  344.       int var9 = 0;
  345.  
  346.       for(int var10 = 0; var10 < var4; ++var10) {
  347.          int var11 = var8;
  348.  
  349.          for(int var12 = 0; var12 < var3; ++var12) {
  350.             for(int var13 = 0; var13 < this.numBands; ++var13) {
  351.                var7[var9++] = var6.getElem(this.bankIndices[var13], var11 + this.bandOffsets[var13]);
  352.             }
  353.  
  354.             var11 += this.pixelStride;
  355.          }
  356.  
  357.          var8 += this.scanlineStride;
  358.       }
  359.  
  360.       return var7;
  361.    }
  362.  
  363.    public int getSample(int var1, int var2, int var3, DataBuffer var4) {
  364.       int var5 = var4.getElem(this.bankIndices[var3], var2 * this.scanlineStride + var1 * this.pixelStride + this.bandOffsets[var3]);
  365.       return var5;
  366.    }
  367.  
  368.    public float getSampleFloat(int var1, int var2, int var3, DataBuffer var4) {
  369.       float var5 = var4.getElemFloat(this.bankIndices[var3], var2 * this.scanlineStride + var1 * this.pixelStride + this.bandOffsets[var3]);
  370.       return var5;
  371.    }
  372.  
  373.    public double getSampleDouble(int var1, int var2, int var3, DataBuffer var4) {
  374.       double var5 = var4.getElemDouble(this.bankIndices[var3], var2 * this.scanlineStride + var1 * this.pixelStride + this.bandOffsets[var3]);
  375.       return var5;
  376.    }
  377.  
  378.    public int[] getSamples(int var1, int var2, int var3, int var4, int var5, int[] var6, DataBuffer var7) {
  379.       int[] var8;
  380.       if (var6 != null) {
  381.          var8 = var6;
  382.       } else {
  383.          var8 = new int[var3 * var4];
  384.       }
  385.  
  386.       int var9 = var2 * this.scanlineStride + var1 * this.pixelStride + this.bandOffsets[var5];
  387.       int var10 = 0;
  388.  
  389.       for(int var11 = 0; var11 < var4; ++var11) {
  390.          int var12 = var9;
  391.  
  392.          for(int var13 = 0; var13 < var3; ++var13) {
  393.             var8[var10++] = var7.getElem(this.bankIndices[var5], var12);
  394.             var12 += this.pixelStride;
  395.          }
  396.  
  397.          var9 += this.scanlineStride;
  398.       }
  399.  
  400.       return var8;
  401.    }
  402.  
  403.    public void setDataElements(int var1, int var2, Object var3, DataBuffer var4) {
  404.       int var5 = ((SampleModel)this).getTransferType();
  405.       int var6 = this.getNumDataElements();
  406.       int var7 = var2 * this.scanlineStride + var1 * this.pixelStride;
  407.       switch (var5) {
  408.          case 0:
  409.             byte[] var8 = (byte[])var3;
  410.  
  411.             for(int var9 = 0; var9 < var6; ++var9) {
  412.                var4.setElem(this.bankIndices[var9], var7 + this.bandOffsets[var9], var8[var9] & 255);
  413.             }
  414.             break;
  415.          case 1:
  416.          case 2:
  417.             short[] var10 = (short[])var3;
  418.  
  419.             for(int var11 = 0; var11 < var6; ++var11) {
  420.                var4.setElem(this.bankIndices[var11], var7 + this.bandOffsets[var11], var10[var11] & '\uffff');
  421.             }
  422.             break;
  423.          case 3:
  424.             int[] var12 = (int[])var3;
  425.  
  426.             for(int var13 = 0; var13 < var6; ++var13) {
  427.                var4.setElem(this.bankIndices[var13], var7 + this.bandOffsets[var13], var12[var13]);
  428.             }
  429.             break;
  430.          case 4:
  431.             float[] var14 = (float[])var3;
  432.  
  433.             for(int var15 = 0; var15 < var6; ++var15) {
  434.                var4.setElemFloat(this.bankIndices[var15], var7 + this.bandOffsets[var15], var14[var15]);
  435.             }
  436.             break;
  437.          case 5:
  438.             double[] var16 = (double[])var3;
  439.  
  440.             for(int var17 = 0; var17 < var6; ++var17) {
  441.                var4.setElemDouble(this.bankIndices[var17], var7 + this.bandOffsets[var17], var16[var17]);
  442.             }
  443.       }
  444.  
  445.    }
  446.  
  447.    public void setPixel(int var1, int var2, int[] var3, DataBuffer var4) {
  448.       int var5 = var2 * this.scanlineStride + var1 * this.pixelStride;
  449.  
  450.       for(int var6 = 0; var6 < this.numBands; ++var6) {
  451.          var4.setElem(this.bankIndices[var6], var5 + this.bandOffsets[var6], var3[var6]);
  452.       }
  453.  
  454.    }
  455.  
  456.    public void setPixels(int var1, int var2, int var3, int var4, int[] var5, DataBuffer var6) {
  457.       int var7 = var2 * this.scanlineStride + var1 * this.pixelStride;
  458.       int var8 = 0;
  459.  
  460.       for(int var9 = 0; var9 < var4; ++var9) {
  461.          int var10 = var7;
  462.  
  463.          for(int var11 = 0; var11 < var3; ++var11) {
  464.             for(int var12 = 0; var12 < this.numBands; ++var12) {
  465.                var6.setElem(this.bankIndices[var12], var10 + this.bandOffsets[var12], var5[var8++]);
  466.             }
  467.  
  468.             var10 += this.pixelStride;
  469.          }
  470.  
  471.          var7 += this.scanlineStride;
  472.       }
  473.  
  474.    }
  475.  
  476.    public void setSample(int var1, int var2, int var3, int var4, DataBuffer var5) {
  477.       var5.setElem(this.bankIndices[var3], var2 * this.scanlineStride + var1 * this.pixelStride + this.bandOffsets[var3], var4);
  478.    }
  479.  
  480.    public void setSample(int var1, int var2, int var3, float var4, DataBuffer var5) {
  481.       var5.setElemFloat(this.bankIndices[var3], var2 * this.scanlineStride + var1 * this.pixelStride + this.bandOffsets[var3], var4);
  482.    }
  483.  
  484.    public void setSample(int var1, int var2, int var3, double var4, DataBuffer var6) {
  485.       var6.setElemDouble(this.bankIndices[var3], var2 * this.scanlineStride + var1 * this.pixelStride + this.bandOffsets[var3], var4);
  486.    }
  487.  
  488.    public void setSamples(int var1, int var2, int var3, int var4, int var5, int[] var6, DataBuffer var7) {
  489.       int var8 = var2 * this.scanlineStride + var1 * this.pixelStride + this.bandOffsets[var5];
  490.       int var9 = 0;
  491.  
  492.       for(int var10 = 0; var10 < var4; ++var10) {
  493.          int var11 = var8;
  494.  
  495.          for(int var12 = 0; var12 < var3; ++var12) {
  496.             var7.setElem(this.bankIndices[var5], var11, var6[var9++]);
  497.             var11 += this.pixelStride;
  498.          }
  499.  
  500.          var8 += this.scanlineStride;
  501.       }
  502.  
  503.    }
  504.  
  505.    static {
  506.       ColorModel.loadLibraries();
  507.       initIDs();
  508.    }
  509. }
  510.