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 / LookupOp.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  6.2 KB  |  305 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 LookupOp implements BufferedImageOp, RasterOp {
  10.    private LookupTable ltable;
  11.    private int numComponents;
  12.    RenderingHints hints;
  13.  
  14.    public LookupOp(LookupTable var1, RenderingHints var2) {
  15.       this.ltable = var1;
  16.       this.hints = var2;
  17.       this.numComponents = this.ltable.getNumComponents();
  18.    }
  19.  
  20.    public final LookupTable getTable() {
  21.       return this.ltable;
  22.    }
  23.  
  24.    public final BufferedImage filter(BufferedImage var1, BufferedImage var2) {
  25.       ColorModel var3 = var1.getColorModel();
  26.       int var4 = var3.getNumColorComponents();
  27.       if (var3 instanceof IndexColorModel) {
  28.          throw new IllegalArgumentException("LookupOp cannot be performed on an indexed image");
  29.       } else {
  30.          int var6 = this.ltable.getNumComponents();
  31.          if (var6 != 1 && var6 != var3.getNumComponents() && var6 != var3.getNumColorComponents()) {
  32.             throw new IllegalArgumentException("Number of arrays in the  lookup table (" + var6 + " is not compatible with the " + " src image: " + var1);
  33.          } else {
  34.             boolean var7 = false;
  35.             int var8 = var1.getWidth();
  36.             int var9 = var1.getHeight();
  37.             ColorModel var5;
  38.             if (var2 == null) {
  39.                var2 = this.createCompatibleDestImage(var1, (ColorModel)null);
  40.                var5 = var3;
  41.             } else {
  42.                if (var8 != var2.getWidth()) {
  43.                   throw new IllegalArgumentException("Src width (" + var8 + ") not equal to dst width (" + var2.getWidth() + ")");
  44.                }
  45.  
  46.                if (var9 != var2.getHeight()) {
  47.                   throw new IllegalArgumentException("Src height (" + var9 + ") not equal to dst height (" + var2.getHeight() + ")");
  48.                }
  49.  
  50.                var5 = var2.getColorModel();
  51.                if (var3.getColorSpace().getType() != var5.getColorSpace().getType()) {
  52.                   var7 = true;
  53.                   var2 = this.createCompatibleDestImage(var1, (ColorModel)null);
  54.                }
  55.             }
  56.  
  57.             if (ImagingLib.filter(this, var1, var2) == null) {
  58.                WritableRaster var11 = var1.getRaster();
  59.                WritableRaster var12 = var2.getRaster();
  60.                if (var3.hasAlpha() && (var4 - 1 == var6 || var6 == 1)) {
  61.                   int var13 = ((Raster)var11).getMinX();
  62.                   int var14 = ((Raster)var11).getMinY();
  63.                   int[] var15 = new int[var4 - 1];
  64.  
  65.                   for(int var16 = 0; var16 < var4 - 1; var15[var16] = var16++) {
  66.                   }
  67.  
  68.                   var11 = var11.createWritableChild(var13, var14, ((Raster)var11).getWidth(), ((Raster)var11).getHeight(), var13, var14, var15);
  69.                }
  70.  
  71.                if (var5.hasAlpha()) {
  72.                   int var19 = ((Raster)var12).getNumBands();
  73.                   if (var19 - 1 == var6 || var6 == 1) {
  74.                      int var20 = ((Raster)var12).getMinX();
  75.                      int var21 = ((Raster)var12).getMinY();
  76.                      int[] var22 = new int[var4 - 1];
  77.  
  78.                      for(int var17 = 0; var17 < var4 - 1; var22[var17] = var17++) {
  79.                      }
  80.  
  81.                      var12 = var12.createWritableChild(var20, var21, ((Raster)var12).getWidth(), ((Raster)var12).getHeight(), var20, var21, var22);
  82.                   }
  83.                }
  84.  
  85.                this.filter((Raster)var11, (WritableRaster)var12);
  86.             }
  87.  
  88.             if (var7) {
  89.                ColorConvertOp var18 = new ColorConvertOp(this.hints);
  90.                var18.filter(var2, var2);
  91.             }
  92.  
  93.             return var2;
  94.          }
  95.       }
  96.    }
  97.  
  98.    public final WritableRaster filter(Raster var1, WritableRaster var2) {
  99.       int var3 = var1.getNumBands();
  100.       int var4 = ((Raster)var2).getNumBands();
  101.       int var5 = var1.getHeight();
  102.       int var6 = var1.getWidth();
  103.       int[] var7 = new int[var3];
  104.       if (var2 == null) {
  105.          var2 = this.createCompatibleDestRaster(var1);
  106.       } else if (var5 != ((Raster)var2).getHeight() || var6 != ((Raster)var2).getWidth()) {
  107.          throw new IllegalArgumentException("Width or height of Rasters do not match");
  108.       }
  109.  
  110.       var4 = ((Raster)var2).getNumBands();
  111.       if (var3 != var4) {
  112.          throw new IllegalArgumentException("Number of channels in the src (" + var3 + ") does not match number of channels" + " in the destination (" + var4 + ")");
  113.       } else {
  114.          int var8 = this.ltable.getNumComponents();
  115.          if (var8 != 1 && var8 != var1.getNumBands()) {
  116.             throw new IllegalArgumentException("Number of arrays in the  lookup table (" + var8 + " is not compatible with the " + " src Raster: " + var1);
  117.          } else if (ImagingLib.filter(this, var1, var2) != null) {
  118.             return var2;
  119.          } else {
  120.             if (this.ltable instanceof ByteLookupTable) {
  121.                this.byteFilter((ByteLookupTable)this.ltable, var1, var2, var6, var5, var3);
  122.             } else if (this.ltable instanceof ShortLookupTable) {
  123.                this.shortFilter((ShortLookupTable)this.ltable, var1, var2, var6, var5, var3);
  124.             } else {
  125.                int var9 = var1.getMinX();
  126.                int var10 = var1.getMinY();
  127.                int var11 = ((Raster)var2).getMinX();
  128.                int var12 = ((Raster)var2).getMinY();
  129.  
  130.                for(int var13 = 0; var13 < var5; ++var12) {
  131.                   int var14 = var9;
  132.                   int var15 = var11;
  133.  
  134.                   for(int var16 = 0; var16 < var6; ++var15) {
  135.                      var1.getPixel(var14, var10, var7);
  136.                      this.ltable.lookupPixel(var7, var7);
  137.                      var2.setPixel(var15, var12, var7);
  138.                      ++var16;
  139.                      ++var14;
  140.                   }
  141.  
  142.                   ++var13;
  143.                   ++var10;
  144.                }
  145.             }
  146.  
  147.             return var2;
  148.          }
  149.       }
  150.    }
  151.  
  152.    public final Rectangle2D getBounds2D(BufferedImage var1) {
  153.       return this.getBounds2D((Raster)var1.getRaster());
  154.    }
  155.  
  156.    public final Rectangle2D getBounds2D(Raster var1) {
  157.       return var1.getBounds();
  158.    }
  159.  
  160.    public BufferedImage createCompatibleDestImage(BufferedImage var1, ColorModel var2) {
  161.       int var4 = var1.getWidth();
  162.       int var5 = var1.getHeight();
  163.       byte var6 = 0;
  164.       BufferedImage var3;
  165.       if (var2 == null) {
  166.          Object var7 = var1.getColorModel();
  167.          WritableRaster var8 = var1.getRaster();
  168.          if (var7 instanceof ComponentColorModel) {
  169.             DataBuffer var9 = ((Raster)var8).getDataBuffer();
  170.             boolean var10 = ((ColorModel)var7).hasAlpha();
  171.             boolean var11 = ((ColorModel)var7).isAlphaPremultiplied();
  172.             int var12 = ((ColorModel)var7).getTransparency();
  173.             int[] var13 = null;
  174.             if (this.ltable instanceof ByteLookupTable) {
  175.                if (var9.getDataType() == 1) {
  176.                   if (var10) {
  177.                      var13 = new int[2];
  178.                      if (var12 == 2) {
  179.                         var13[1] = 1;
  180.                      } else {
  181.                         var13[1] = 8;
  182.                      }
  183.                   } else {
  184.                      var13 = new int[1];
  185.                   }
  186.  
  187.                   var13[0] = 8;
  188.                }
  189.             } else if (this.ltable instanceof ShortLookupTable) {
  190.                var6 = 1;
  191.                if (var9.getDataType() == 0) {
  192.                   if (var10) {
  193.                      var13 = new int[2];
  194.                      if (var12 == 2) {
  195.                         var13[1] = 1;
  196.                      } else {
  197.                         var13[1] = 16;
  198.                      }
  199.                   } else {
  200.                      var13 = new int[1];
  201.                   }
  202.  
  203.                   var13[0] = 16;
  204.                }
  205.             }
  206.  
  207.             if (var13 != null) {
  208.                var7 = new ComponentColorModel(((ColorModel)var7).getColorSpace(), var13, var10, var11, var12, var6);
  209.             }
  210.          }
  211.  
  212.          var3 = new BufferedImage((ColorModel)var7, ((ColorModel)var7).createCompatibleWritableRaster(var4, var5), ((ColorModel)var7).isAlphaPremultiplied(), (Hashtable)null);
  213.       } else {
  214.          var3 = new BufferedImage(var2, var2.createCompatibleWritableRaster(var4, var5), var2.isAlphaPremultiplied(), (Hashtable)null);
  215.       }
  216.  
  217.       return var3;
  218.    }
  219.  
  220.    public WritableRaster createCompatibleDestRaster(Raster var1) {
  221.       return var1.createCompatibleWritableRaster();
  222.    }
  223.  
  224.    public final Point2D getPoint2D(Point2D var1, Point2D var2) {
  225.       if (var2 == null) {
  226.          var2 = new Point2D.Float();
  227.       }
  228.  
  229.       ((Point2D)var2).setLocation(var1.getX(), var1.getY());
  230.       return (Point2D)var2;
  231.    }
  232.  
  233.    public final RenderingHints getRenderingHints() {
  234.       return this.hints;
  235.    }
  236.  
  237.    private final void byteFilter(ByteLookupTable var1, Raster var2, WritableRaster var3, int var4, int var5, int var6) {
  238.       int[] var7 = null;
  239.       byte[][] var8 = var1.getTable();
  240.       int var9 = ((LookupTable)var1).getOffset();
  241.       byte var11 = 1;
  242.       if (var8.length == 1) {
  243.          var11 = 0;
  244.       }
  245.  
  246.       int var15 = var8[0].length;
  247.  
  248.       for(int var13 = 0; var13 < var5; ++var13) {
  249.          int var10 = 0;
  250.  
  251.          for(int var14 = 0; var14 < var6; var10 += var11) {
  252.             var7 = var2.getSamples(0, var13, var4, 1, var14, var7);
  253.  
  254.             for(int var12 = 0; var12 < var4; ++var12) {
  255.                int var16 = var7[var12] - var9;
  256.                if (var16 < 0 || var16 > var15) {
  257.                   throw new IllegalArgumentException("index (" + var16 + "(out of range: " + " srcPix[" + var12 + "]=" + var7[var12] + " offset=" + var9);
  258.                }
  259.  
  260.                var7[var12] = var8[var10][var16];
  261.             }
  262.  
  263.             var3.setSamples(0, var13, var4, 1, var14, var7);
  264.             ++var14;
  265.          }
  266.       }
  267.  
  268.    }
  269.  
  270.    private final void shortFilter(ShortLookupTable var1, Raster var2, WritableRaster var3, int var4, int var5, int var6) {
  271.       int[] var8 = null;
  272.       short[][] var9 = var1.getTable();
  273.       int var10 = ((LookupTable)var1).getOffset();
  274.       byte var12 = 1;
  275.       if (var9.length == 1) {
  276.          var12 = 0;
  277.       }
  278.  
  279.       boolean var13 = false;
  280.       boolean var14 = false;
  281.       char var16 = '\uffff';
  282.  
  283.       for(int var18 = 0; var18 < var5; ++var18) {
  284.          int var11 = 0;
  285.  
  286.          for(int var7 = 0; var7 < var6; var11 += var12) {
  287.             var8 = var2.getSamples(0, var18, var4, 1, var7, var8);
  288.  
  289.             for(int var17 = 0; var17 < var4; ++var17) {
  290.                int var15 = var8[var17] - var10;
  291.                if (var15 < 0 || var15 > var16) {
  292.                   throw new IllegalArgumentException("index out of range " + var15 + " x is " + var17 + "srcPix[x]=" + var8[var17] + " offset=" + var10);
  293.                }
  294.  
  295.                var8[var17] = var9[var11][var15];
  296.             }
  297.  
  298.             var3.setSamples(0, var18, var4, 1, var7, var8);
  299.             ++var7;
  300.          }
  301.       }
  302.  
  303.    }
  304. }
  305.