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

  1. package java.awt.image;
  2.  
  3. import java.awt.RenderingHints;
  4. import java.awt.geom.Point2D;
  5. import java.awt.geom.Rectangle2D;
  6. import java.util.Hashtable;
  7. import sun.awt.image.ImagingLib;
  8.  
  9. public class RescaleOp implements BufferedImageOp, RasterOp {
  10.    float[] scaleFactors;
  11.    float[] offsets;
  12.    int length = 0;
  13.    RenderingHints hints;
  14.    private int srcNbits;
  15.    private int dstNbits;
  16.  
  17.    public RescaleOp(float[] var1, float[] var2, RenderingHints var3) {
  18.       this.length = var1.length;
  19.       if (this.length > var2.length) {
  20.          this.length = var2.length;
  21.       }
  22.  
  23.       this.scaleFactors = new float[this.length];
  24.       this.offsets = new float[this.length];
  25.  
  26.       for(int var4 = 0; var4 < this.length; ++var4) {
  27.          this.scaleFactors[var4] = var1[var4];
  28.          this.offsets[var4] = var2[var4];
  29.       }
  30.  
  31.       this.hints = var3;
  32.    }
  33.  
  34.    public RescaleOp(float var1, float var2, RenderingHints var3) {
  35.       this.length = 1;
  36.       this.scaleFactors = new float[1];
  37.       this.offsets = new float[1];
  38.       this.scaleFactors[0] = var1;
  39.       this.offsets[0] = var2;
  40.       this.hints = var3;
  41.    }
  42.  
  43.    public final float[] getScaleFactors(float[] var1) {
  44.       if (var1 == null) {
  45.          return (float[])this.scaleFactors.clone();
  46.       } else {
  47.          System.arraycopy(this.scaleFactors, 0, var1, 0, Math.min(this.scaleFactors.length, var1.length));
  48.          return var1;
  49.       }
  50.    }
  51.  
  52.    public final float[] getOffsets(float[] var1) {
  53.       if (var1 == null) {
  54.          return (float[])this.offsets.clone();
  55.       } else {
  56.          System.arraycopy(this.offsets, 0, var1, 0, Math.min(this.offsets.length, var1.length));
  57.          return var1;
  58.       }
  59.    }
  60.  
  61.    public final int getNumFactors() {
  62.       return this.length;
  63.    }
  64.  
  65.    private ByteLookupTable createByteLut(float[] var1, float[] var2, int var3, int var4) {
  66.       byte[][] var5 = new byte[var1.length][var4];
  67.  
  68.       for(int var6 = 0; var6 < var1.length; ++var6) {
  69.          float var7 = var1[var6];
  70.          float var8 = var2[var6];
  71.          byte[] var9 = var5[var6];
  72.  
  73.          for(int var10 = 0; var10 < var4; ++var10) {
  74.             int var11 = (int)((float)var10 * var7 + var8);
  75.             if ((var11 & -256) != 0) {
  76.                if (var11 < 0) {
  77.                   var11 = 0;
  78.                } else {
  79.                   var11 = 255;
  80.                }
  81.             }
  82.  
  83.             var9[var10] = (byte)var11;
  84.          }
  85.       }
  86.  
  87.       return new ByteLookupTable(0, var5);
  88.    }
  89.  
  90.    private ShortLookupTable createShortLut(float[] var1, float[] var2, int var3, int var4) {
  91.       short[][] var5 = new short[var1.length][var4];
  92.  
  93.       for(int var6 = 0; var6 < var1.length; ++var6) {
  94.          float var7 = var1[var6];
  95.          float var8 = var2[var6];
  96.          short[] var9 = var5[var6];
  97.  
  98.          for(int var10 = 0; var10 < var4; ++var10) {
  99.             int var11 = (int)((float)var10 * var7 + var8);
  100.             if ((var11 & -65536) != 0) {
  101.                if (var11 < 0) {
  102.                   var11 = 0;
  103.                } else {
  104.                   var11 = 65535;
  105.                }
  106.             }
  107.  
  108.             var9[var10] = (short)var11;
  109.          }
  110.       }
  111.  
  112.       return new ShortLookupTable(0, var5);
  113.    }
  114.  
  115.    private boolean canUseLookup(Raster var1, Raster var2) {
  116.       int var3 = var1.getDataBuffer().getDataType();
  117.       if (var3 != 0 && var3 != 1) {
  118.          return false;
  119.       } else {
  120.          SampleModel var4 = var2.getSampleModel();
  121.          this.dstNbits = var4.getSampleSize(0);
  122.          if (this.dstNbits != 8 && this.dstNbits != 16) {
  123.             return false;
  124.          } else {
  125.             for(int var5 = 1; var5 < var1.getNumBands(); ++var5) {
  126.                int var6 = var4.getSampleSize(var5);
  127.                if (var6 != this.dstNbits) {
  128.                   return false;
  129.                }
  130.             }
  131.  
  132.             SampleModel var9 = var1.getSampleModel();
  133.             this.srcNbits = var9.getSampleSize(0);
  134.             if (this.srcNbits > 16) {
  135.                return false;
  136.             } else {
  137.                for(int var7 = 1; var7 < var1.getNumBands(); ++var7) {
  138.                   int var8 = var9.getSampleSize(var7);
  139.                   if (var8 != this.srcNbits) {
  140.                      return false;
  141.                   }
  142.                }
  143.  
  144.                return true;
  145.             }
  146.          }
  147.       }
  148.    }
  149.  
  150.    public final BufferedImage filter(BufferedImage var1, BufferedImage var2) {
  151.       ColorModel var3 = var1.getColorModel();
  152.       int var5 = var3.getNumColorComponents();
  153.       if (var3 instanceof IndexColorModel) {
  154.          throw new IllegalArgumentException("Rescaling cannot be performed on an indexed image");
  155.       } else if (this.length != 1 && this.length != var5 && this.length != var3.getNumComponents()) {
  156.          throw new IllegalArgumentException("Number of scaling constants does not equal the number of of color or color/alpha  components");
  157.       } else {
  158.          boolean var6 = false;
  159.          if (this.length > var5 && var3.hasAlpha()) {
  160.             this.length = var5 + 1;
  161.          }
  162.  
  163.          int var7 = var1.getWidth();
  164.          int var8 = var1.getHeight();
  165.          ColorModel var4;
  166.          if (var2 == null) {
  167.             var2 = this.createCompatibleDestImage(var1, (ColorModel)null);
  168.             var4 = var3;
  169.          } else {
  170.             if (var7 != var2.getWidth()) {
  171.                throw new IllegalArgumentException("Src width (" + var7 + ") not equal to dst width (" + var2.getWidth() + ")");
  172.             }
  173.  
  174.             if (var8 != var2.getHeight()) {
  175.                throw new IllegalArgumentException("Src height (" + var8 + ") not equal to dst height (" + var2.getHeight() + ")");
  176.             }
  177.  
  178.             var4 = var2.getColorModel();
  179.             if (var3.getColorSpace().getType() != var4.getColorSpace().getType()) {
  180.                var6 = true;
  181.                var2 = this.createCompatibleDestImage(var1, (ColorModel)null);
  182.             }
  183.          }
  184.  
  185.          if (ImagingLib.filter(this, var1, var2) == null) {
  186.             WritableRaster var10 = var1.getRaster();
  187.             WritableRaster var11 = var2.getRaster();
  188.             if (var3.hasAlpha() && (var5 - 1 == this.length || this.length == 1)) {
  189.                int var12 = ((Raster)var10).getMinX();
  190.                int var13 = ((Raster)var10).getMinY();
  191.                int[] var14 = new int[var5 - 1];
  192.  
  193.                for(int var15 = 0; var15 < var5 - 1; var14[var15] = var15++) {
  194.                }
  195.  
  196.                var10 = var10.createWritableChild(var12, var13, ((Raster)var10).getWidth(), ((Raster)var10).getHeight(), var12, var13, var14);
  197.             }
  198.  
  199.             if (var4.hasAlpha()) {
  200.                int var18 = ((Raster)var11).getNumBands();
  201.                if (var18 - 1 == this.length || this.length == 1) {
  202.                   int var19 = ((Raster)var11).getMinX();
  203.                   int var20 = ((Raster)var11).getMinY();
  204.                   int[] var21 = new int[var5 - 1];
  205.  
  206.                   for(int var16 = 0; var16 < var5 - 1; var21[var16] = var16++) {
  207.                   }
  208.  
  209.                   var11 = var11.createWritableChild(var19, var20, ((Raster)var11).getWidth(), ((Raster)var11).getHeight(), var19, var20, var21);
  210.                }
  211.             }
  212.  
  213.             this.filter((Raster)var10, (WritableRaster)var11);
  214.          }
  215.  
  216.          if (var6) {
  217.             ColorConvertOp var17 = new ColorConvertOp(this.hints);
  218.             var17.filter(var2, var2);
  219.          }
  220.  
  221.          return var2;
  222.       }
  223.    }
  224.  
  225.    public final WritableRaster filter(Raster var1, WritableRaster var2) {
  226.       int var3 = var1.getNumBands();
  227.       int var4 = var1.getWidth();
  228.       int var5 = var1.getHeight();
  229.       int[] var6 = null;
  230.       byte var7 = 0;
  231.       int var8 = 0;
  232.       if (var2 == null) {
  233.          var2 = this.createCompatibleDestRaster(var1);
  234.       } else {
  235.          if (var5 != ((Raster)var2).getHeight() || var4 != ((Raster)var2).getWidth()) {
  236.             throw new IllegalArgumentException("Width or height of Rasters do not match");
  237.          }
  238.  
  239.          if (var3 != ((Raster)var2).getNumBands()) {
  240.             throw new IllegalArgumentException("Number of bands in src " + var3 + " does not equal number of bands in dest " + ((Raster)var2).getNumBands());
  241.          }
  242.       }
  243.  
  244.       if (this.length != 1 && this.length != var1.getNumBands()) {
  245.          throw new IllegalArgumentException("Number of scaling constants does not equal the number of of bands in the src raster");
  246.       } else if (ImagingLib.filter(this, var1, var2) != null) {
  247.          return var2;
  248.       } else {
  249.          if (this.canUseLookup(var1, var2)) {
  250.             int var9 = 1 << this.srcNbits;
  251.             int var10 = 1 << this.dstNbits;
  252.             if (var10 == 256) {
  253.                ByteLookupTable var11 = this.createByteLut(this.scaleFactors, this.offsets, var3, var9);
  254.                LookupOp var12 = new LookupOp(var11, this.hints);
  255.                var12.filter(var1, var2);
  256.             } else {
  257.                ShortLookupTable var27 = this.createShortLut(this.scaleFactors, this.offsets, var3, var9);
  258.                LookupOp var29 = new LookupOp(var27, this.hints);
  259.                var29.filter(var1, var2);
  260.             }
  261.          } else {
  262.             if (this.length > 1) {
  263.                var7 = 1;
  264.             }
  265.  
  266.             int var25 = var1.getMinX();
  267.             int var26 = var1.getMinY();
  268.             int var28 = ((Raster)var2).getMinX();
  269.             int var30 = ((Raster)var2).getMinY();
  270.             int[] var16 = new int[var3];
  271.             int[] var17 = new int[var3];
  272.             SampleModel var18 = ((Raster)var2).getSampleModel();
  273.  
  274.             for(int var19 = 0; var19 < var3; ++var19) {
  275.                int var15 = var18.getSampleSize(var19);
  276.                var16[var19] = (1 << var15) - 1;
  277.                var17[var19] = ~var16[var19];
  278.             }
  279.  
  280.             for(int var21 = 0; var21 < var5; ++var30) {
  281.                int var14 = var28;
  282.                int var13 = var25;
  283.  
  284.                for(int var22 = 0; var22 < var4; ++var14) {
  285.                   var6 = var1.getPixel(var13, var26, var6);
  286.                   var8 = 0;
  287.  
  288.                   for(int var23 = 0; var23 < var3; var8 += var7) {
  289.                      int var20 = (int)((float)var6[var23] * this.scaleFactors[var8] + this.offsets[var8]);
  290.                      if ((var20 & var17[var23]) != 0) {
  291.                         if (var20 < 0) {
  292.                            var20 = 0;
  293.                         } else {
  294.                            var20 = var16[var23];
  295.                         }
  296.                      }
  297.  
  298.                      var6[var23] = var20;
  299.                      ++var23;
  300.                   }
  301.  
  302.                   var2.setPixel(var14, var30, var6);
  303.                   ++var22;
  304.                   ++var13;
  305.                }
  306.  
  307.                ++var21;
  308.                ++var26;
  309.             }
  310.          }
  311.  
  312.          return var2;
  313.       }
  314.    }
  315.  
  316.    public final Rectangle2D getBounds2D(BufferedImage var1) {
  317.       return this.getBounds2D((Raster)var1.getRaster());
  318.    }
  319.  
  320.    public final Rectangle2D getBounds2D(Raster var1) {
  321.       return var1.getBounds();
  322.    }
  323.  
  324.    public BufferedImage createCompatibleDestImage(BufferedImage var1, ColorModel var2) {
  325.       BufferedImage var3;
  326.       if (var2 == null) {
  327.          ColorModel var4 = var1.getColorModel();
  328.          var3 = new BufferedImage(var4, var1.getRaster().createCompatibleWritableRaster(), var4.isAlphaPremultiplied(), (Hashtable)null);
  329.       } else {
  330.          int var6 = var1.getWidth();
  331.          int var5 = var1.getHeight();
  332.          var3 = new BufferedImage(var2, var2.createCompatibleWritableRaster(var6, var5), var2.isAlphaPremultiplied(), (Hashtable)null);
  333.       }
  334.  
  335.       return var3;
  336.    }
  337.  
  338.    public WritableRaster createCompatibleDestRaster(Raster var1) {
  339.       return var1.createCompatibleWritableRaster(var1.getWidth(), var1.getHeight());
  340.    }
  341.  
  342.    public final Point2D getPoint2D(Point2D var1, Point2D var2) {
  343.       if (var2 == null) {
  344.          var2 = new Point2D.Float();
  345.       }
  346.  
  347.       ((Point2D)var2).setLocation(var1.getX(), var1.getY());
  348.       return (Point2D)var2;
  349.    }
  350.  
  351.    public final RenderingHints getRenderingHints() {
  352.       return this.hints;
  353.    }
  354. }
  355.