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 / MultiPixelPackedSampleModel.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  3.7 KB  |  231 lines

  1. package java.awt.image;
  2.  
  3. public class MultiPixelPackedSampleModel extends SampleModel {
  4.    int pixelBitStride;
  5.    int bitMask;
  6.    int pixelsPerDataElement;
  7.    int dataElementSize;
  8.    int dataBitOffset;
  9.    int scanlineStride;
  10.  
  11.    public MultiPixelPackedSampleModel(int var1, int var2, int var3, int var4) {
  12.       this(var1, var2, var3, var4, (var2 * var4 + DataBuffer.getDataTypeSize(var1) - 1) / DataBuffer.getDataTypeSize(var1), 0);
  13.       if (var1 != 0 && var1 != 1 && var1 != 3) {
  14.          throw new IllegalArgumentException("Unsupported data type " + var1);
  15.       }
  16.    }
  17.  
  18.    public MultiPixelPackedSampleModel(int var1, int var2, int var3, int var4, int var5, int var6) {
  19.       super(var1, var2, var3, 1);
  20.       if (var1 != 0 && var1 != 1 && var1 != 3) {
  21.          throw new IllegalArgumentException("Unsupported data type " + var1);
  22.       } else {
  23.          super.dataType = var1;
  24.          this.pixelBitStride = var4;
  25.          this.scanlineStride = var5;
  26.          this.dataBitOffset = var6;
  27.          this.dataElementSize = DataBuffer.getDataTypeSize(var1);
  28.          this.pixelsPerDataElement = this.dataElementSize / var4;
  29.          if (this.pixelsPerDataElement * var4 != this.dataElementSize) {
  30.             throw new RasterFormatException("MultiPixelPackedSampleModel does not allow pixels to span data element boundaries");
  31.          } else {
  32.             this.bitMask = (1 << var4) - 1;
  33.          }
  34.       }
  35.    }
  36.  
  37.    public SampleModel createCompatibleSampleModel(int var1, int var2) {
  38.       MultiPixelPackedSampleModel var3 = new MultiPixelPackedSampleModel(super.dataType, var1, var2, this.pixelBitStride);
  39.       return var3;
  40.    }
  41.  
  42.    public DataBuffer createDataBuffer() {
  43.       Object var1 = null;
  44.       int var2 = this.scanlineStride * super.height;
  45.       switch (super.dataType) {
  46.          case 0:
  47.             var1 = new DataBufferByte(var2 + (this.dataBitOffset + 7) / 8);
  48.             break;
  49.          case 1:
  50.             var1 = new DataBufferUShort(var2 + (this.dataBitOffset + 15) / 16);
  51.          case 2:
  52.          default:
  53.             break;
  54.          case 3:
  55.             var1 = new DataBufferInt(var2 + (this.dataBitOffset + 31) / 32);
  56.       }
  57.  
  58.       return (DataBuffer)var1;
  59.    }
  60.  
  61.    public int getNumDataElements() {
  62.       return 1;
  63.    }
  64.  
  65.    public int[] getSampleSize() {
  66.       int[] var1 = new int[]{this.pixelBitStride};
  67.       return var1;
  68.    }
  69.  
  70.    public int getSampleSize(int var1) {
  71.       return this.pixelBitStride;
  72.    }
  73.  
  74.    public int getOffset(int var1, int var2) {
  75.       int var3 = var2 * this.scanlineStride;
  76.       var3 += (var1 * this.pixelBitStride + this.dataBitOffset) / this.dataElementSize;
  77.       return var3;
  78.    }
  79.  
  80.    public int getBitOffset(int var1) {
  81.       return (var1 * this.pixelBitStride + this.dataBitOffset) % this.dataElementSize;
  82.    }
  83.  
  84.    public int getScanlineStride() {
  85.       return this.scanlineStride;
  86.    }
  87.  
  88.    public int getPixelBitStride() {
  89.       return this.pixelBitStride;
  90.    }
  91.  
  92.    public int getDataBitOffset() {
  93.       return this.dataBitOffset;
  94.    }
  95.  
  96.    public int getTransferType() {
  97.       if (this.pixelBitStride > 16) {
  98.          return 3;
  99.       } else {
  100.          return this.pixelBitStride > 8 ? 1 : 0;
  101.       }
  102.    }
  103.  
  104.    public SampleModel createSubsetSampleModel(int[] var1) {
  105.       if (var1 != null && var1.length != 1) {
  106.          throw new RasterFormatException("MultiPixelPackedSampleModel has only one band.");
  107.       } else {
  108.          SampleModel var2 = this.createCompatibleSampleModel(super.width, super.height);
  109.          return var2;
  110.       }
  111.    }
  112.  
  113.    public int getSample(int var1, int var2, int var3, DataBuffer var4) {
  114.       int var5 = this.dataBitOffset + var1 * this.pixelBitStride;
  115.       int var6 = var4.getElem(var2 * this.scanlineStride + var5 / this.dataElementSize);
  116.       int var7 = this.dataElementSize - (var5 & this.dataElementSize - 1) - this.pixelBitStride;
  117.       return var6 >> var7 & this.bitMask;
  118.    }
  119.  
  120.    public void setSample(int var1, int var2, int var3, int var4, DataBuffer var5) {
  121.       int var6 = this.dataBitOffset + var1 * this.pixelBitStride;
  122.       int var7 = var2 * this.scanlineStride + var6 / this.dataElementSize;
  123.       int var8 = this.dataElementSize - (var6 & this.dataElementSize - 1) - this.pixelBitStride;
  124.       int var9 = var5.getElem(var7);
  125.       var9 &= ~(this.bitMask << var8);
  126.       var9 |= (var4 & this.bitMask) << var8;
  127.       var5.setElem(var7, var9);
  128.    }
  129.  
  130.    public Object getDataElements(int var1, int var2, Object var3, DataBuffer var4) {
  131.       int var5 = this.getTransferType();
  132.       int var6 = this.dataBitOffset + var1 * this.pixelBitStride;
  133.       int var7 = this.dataElementSize - (var6 & this.dataElementSize - 1) - this.pixelBitStride;
  134.       int var8 = 0;
  135.       switch (var5) {
  136.          case 0:
  137.             byte[] var9;
  138.             if (var3 == null) {
  139.                var9 = new byte[1];
  140.             } else {
  141.                var9 = (byte[])var3;
  142.             }
  143.  
  144.             var8 = var4.getElem(var2 * this.scanlineStride + var6 / this.dataElementSize);
  145.             var9[0] = (byte)(var8 >> var7 & this.bitMask);
  146.             var3 = var9;
  147.             break;
  148.          case 1:
  149.             short[] var10;
  150.             if (var3 == null) {
  151.                var10 = new short[1];
  152.             } else {
  153.                var10 = (short[])var3;
  154.             }
  155.  
  156.             var8 = var4.getElem(var2 * this.scanlineStride + var6 / this.dataElementSize);
  157.             var10[0] = (short)(var8 >> var7 & this.bitMask);
  158.             var3 = var10;
  159.          case 2:
  160.          default:
  161.             break;
  162.          case 3:
  163.             int[] var11;
  164.             if (var3 == null) {
  165.                var11 = new int[1];
  166.             } else {
  167.                var11 = (int[])var3;
  168.             }
  169.  
  170.             var8 = var4.getElem(var2 * this.scanlineStride + var6 / this.dataElementSize);
  171.             var11[0] = var8 >> var7 & this.bitMask;
  172.             var3 = var11;
  173.       }
  174.  
  175.       return var3;
  176.    }
  177.  
  178.    public int[] getPixel(int var1, int var2, int[] var3, DataBuffer var4) {
  179.       int[] var5;
  180.       if (var3 != null) {
  181.          var5 = var3;
  182.       } else {
  183.          var5 = new int[super.numBands];
  184.       }
  185.  
  186.       int var6 = this.dataBitOffset + var1 * this.pixelBitStride;
  187.       int var7 = var4.getElem(var2 * this.scanlineStride + var6 / this.dataElementSize);
  188.       int var8 = this.dataElementSize - (var6 & this.dataElementSize - 1) - this.pixelBitStride;
  189.       var5[0] = var7 >> var8 & this.bitMask;
  190.       return var5;
  191.    }
  192.  
  193.    public void setDataElements(int var1, int var2, Object var3, DataBuffer var4) {
  194.       int var5 = this.getTransferType();
  195.       int var6 = this.dataBitOffset + var1 * this.pixelBitStride;
  196.       int var7 = var2 * this.scanlineStride + var6 / this.dataElementSize;
  197.       int var8 = this.dataElementSize - (var6 & this.dataElementSize - 1) - this.pixelBitStride;
  198.       int var9 = var4.getElem(var7);
  199.       var9 &= ~(this.bitMask << var8);
  200.       switch (var5) {
  201.          case 0:
  202.             byte[] var10 = (byte[])var3;
  203.             var9 |= (var10[0] & 255 & this.bitMask) << var8;
  204.             var4.setElem(var7, var9);
  205.             break;
  206.          case 1:
  207.             short[] var11 = (short[])var3;
  208.             var9 |= (var11[0] & '\uffff' & this.bitMask) << var8;
  209.             var4.setElem(var7, var9);
  210.          case 2:
  211.          default:
  212.             break;
  213.          case 3:
  214.             int[] var12 = (int[])var3;
  215.             var9 |= (var12[0] & this.bitMask) << var8;
  216.             var4.setElem(var7, var9);
  217.       }
  218.  
  219.    }
  220.  
  221.    public void setPixel(int var1, int var2, int[] var3, DataBuffer var4) {
  222.       int var5 = this.dataBitOffset + var1 * this.pixelBitStride;
  223.       int var6 = var2 * this.scanlineStride + var5 / this.dataElementSize;
  224.       int var7 = this.dataElementSize - (var5 & this.dataElementSize - 1) - this.pixelBitStride;
  225.       int var8 = var4.getElem(var6);
  226.       var8 &= ~(this.bitMask << var7);
  227.       var8 |= (var3[0] & this.bitMask) << var7;
  228.       var4.setElem(var6, var8);
  229.    }
  230. }
  231.