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

  1. package java.awt.image;
  2.  
  3. import java.awt.Image;
  4. import java.util.Hashtable;
  5.  
  6. public class PixelGrabber implements ImageConsumer {
  7.    ImageProducer producer;
  8.    int dstX;
  9.    int dstY;
  10.    int dstW;
  11.    int dstH;
  12.    ColorModel imageModel;
  13.    byte[] bytePixels;
  14.    int[] intPixels;
  15.    int dstOff;
  16.    int dstScan;
  17.    private boolean grabbing;
  18.    private int flags;
  19.    private static final int GRABBEDBITS = 48;
  20.    private static final int DONEBITS = 112;
  21.  
  22.    public PixelGrabber(Image var1, int var2, int var3, int var4, int var5, int[] var6, int var7, int var8) {
  23.       this(var1.getSource(), var2, var3, var4, var5, var6, var7, var8);
  24.    }
  25.  
  26.    public PixelGrabber(ImageProducer var1, int var2, int var3, int var4, int var5, int[] var6, int var7, int var8) {
  27.       this.producer = var1;
  28.       this.dstX = var2;
  29.       this.dstY = var3;
  30.       this.dstW = var4;
  31.       this.dstH = var5;
  32.       this.dstOff = var7;
  33.       this.dstScan = var8;
  34.       this.intPixels = var6;
  35.       this.imageModel = ColorModel.getRGBdefault();
  36.    }
  37.  
  38.    public PixelGrabber(Image var1, int var2, int var3, int var4, int var5, boolean var6) {
  39.       this.producer = var1.getSource();
  40.       this.dstX = var2;
  41.       this.dstY = var3;
  42.       this.dstW = var4;
  43.       this.dstH = var5;
  44.       if (var6) {
  45.          this.imageModel = ColorModel.getRGBdefault();
  46.       }
  47.  
  48.    }
  49.  
  50.    public synchronized void startGrabbing() {
  51.       if ((this.flags & 112) == 0) {
  52.          if (!this.grabbing) {
  53.             this.grabbing = true;
  54.             this.flags &= -129;
  55.             this.producer.startProduction(this);
  56.          }
  57.  
  58.       }
  59.    }
  60.  
  61.    public synchronized void abortGrabbing() {
  62.       this.imageComplete(4);
  63.    }
  64.  
  65.    public boolean grabPixels() throws InterruptedException {
  66.       return this.grabPixels(0L);
  67.    }
  68.  
  69.    public synchronized boolean grabPixels(long var1) throws InterruptedException {
  70.       if ((this.flags & 112) != 0) {
  71.          return (this.flags & 48) != 0;
  72.       } else {
  73.          long var3 = var1 + System.currentTimeMillis();
  74.          if (!this.grabbing) {
  75.             this.grabbing = true;
  76.             this.flags &= -129;
  77.             this.producer.startProduction(this);
  78.          }
  79.  
  80.          long var5;
  81.          for(; this.grabbing; this.wait(var5)) {
  82.             if (var1 == 0L) {
  83.                var5 = 0L;
  84.             } else {
  85.                var5 = var3 - System.currentTimeMillis();
  86.                if (var5 <= 0L) {
  87.                   break;
  88.                }
  89.             }
  90.          }
  91.  
  92.          return (this.flags & 48) != 0;
  93.       }
  94.    }
  95.  
  96.    public synchronized int getStatus() {
  97.       return this.flags;
  98.    }
  99.  
  100.    public synchronized int getWidth() {
  101.       return this.dstW < 0 ? -1 : this.dstW;
  102.    }
  103.  
  104.    public synchronized int getHeight() {
  105.       return this.dstH < 0 ? -1 : this.dstH;
  106.    }
  107.  
  108.    public synchronized Object getPixels() {
  109.       return this.bytePixels == null ? this.intPixels : this.bytePixels;
  110.    }
  111.  
  112.    public synchronized ColorModel getColorModel() {
  113.       return this.imageModel;
  114.    }
  115.  
  116.    public void setDimensions(int var1, int var2) {
  117.       if (this.dstW < 0) {
  118.          this.dstW = var1 - this.dstX;
  119.       }
  120.  
  121.       if (this.dstH < 0) {
  122.          this.dstH = var2 - this.dstY;
  123.       }
  124.  
  125.       if (this.dstW > 0 && this.dstH > 0) {
  126.          if (this.intPixels == null && this.imageModel == ColorModel.getRGBdefault()) {
  127.             this.intPixels = new int[this.dstW * this.dstH];
  128.             this.dstScan = this.dstW;
  129.             this.dstOff = 0;
  130.          }
  131.       } else {
  132.          this.imageComplete(3);
  133.       }
  134.  
  135.       this.flags |= 3;
  136.    }
  137.  
  138.    public void setHints(int var1) {
  139.    }
  140.  
  141.    public void setProperties(Hashtable var1) {
  142.    }
  143.  
  144.    public void setColorModel(ColorModel var1) {
  145.    }
  146.  
  147.    private void convertToRGB() {
  148.       int var1 = this.dstW * this.dstH;
  149.       int[] var2 = new int[var1];
  150.       if (this.bytePixels != null) {
  151.          for(int var3 = 0; var3 < var1; ++var3) {
  152.             var2[var3] = this.imageModel.getRGB(this.bytePixels[var3] & 255);
  153.          }
  154.       } else if (this.intPixels != null) {
  155.          for(int var4 = 0; var4 < var1; ++var4) {
  156.             var2[var4] = this.imageModel.getRGB(this.intPixels[var4]);
  157.          }
  158.       }
  159.  
  160.       this.bytePixels = null;
  161.       this.intPixels = var2;
  162.       this.dstScan = this.dstW;
  163.       this.dstOff = 0;
  164.       this.imageModel = ColorModel.getRGBdefault();
  165.    }
  166.  
  167.    public void setPixels(int var1, int var2, int var3, int var4, ColorModel var5, byte[] var6, int var7, int var8) {
  168.       if (var2 < this.dstY) {
  169.          int var9 = this.dstY - var2;
  170.          if (var9 >= var4) {
  171.             return;
  172.          }
  173.  
  174.          var7 += var8 * var9;
  175.          var2 += var9;
  176.          var4 -= var9;
  177.       }
  178.  
  179.       if (var2 + var4 > this.dstY + this.dstH) {
  180.          var4 = this.dstY + this.dstH - var2;
  181.          if (var4 <= 0) {
  182.             return;
  183.          }
  184.       }
  185.  
  186.       if (var1 < this.dstX) {
  187.          int var14 = this.dstX - var1;
  188.          if (var14 >= var3) {
  189.             return;
  190.          }
  191.  
  192.          var7 += var14;
  193.          var1 += var14;
  194.          var3 -= var14;
  195.       }
  196.  
  197.       if (var1 + var3 > this.dstX + this.dstW) {
  198.          var3 = this.dstX + this.dstW - var1;
  199.          if (var3 <= 0) {
  200.             return;
  201.          }
  202.       }
  203.  
  204.       int var15 = this.dstOff + (var2 - this.dstY) * this.dstScan + (var1 - this.dstX);
  205.       if (this.intPixels == null) {
  206.          if (this.bytePixels == null) {
  207.             this.bytePixels = new byte[this.dstW * this.dstH];
  208.             this.dstScan = this.dstW;
  209.             this.dstOff = 0;
  210.             this.imageModel = var5;
  211.          } else if (this.imageModel != var5) {
  212.             this.convertToRGB();
  213.          }
  214.  
  215.          if (this.bytePixels != null) {
  216.             for(int var10 = var4; var10 > 0; --var10) {
  217.                System.arraycopy(var6, var7, this.bytePixels, var15, var3);
  218.                var7 += var8;
  219.                var15 += this.dstScan;
  220.             }
  221.          }
  222.       }
  223.  
  224.       if (this.intPixels != null) {
  225.          int var16 = this.dstScan - var3;
  226.          int var11 = var8 - var3;
  227.  
  228.          for(int var12 = var4; var12 > 0; --var12) {
  229.             for(int var13 = var3; var13 > 0; --var13) {
  230.                this.intPixels[var15++] = var5.getRGB(var6[var7++] & 255);
  231.             }
  232.  
  233.             var7 += var11;
  234.             var15 += var16;
  235.          }
  236.       }
  237.  
  238.       this.flags |= 8;
  239.    }
  240.  
  241.    public void setPixels(int var1, int var2, int var3, int var4, ColorModel var5, int[] var6, int var7, int var8) {
  242.       if (var2 < this.dstY) {
  243.          int var9 = this.dstY - var2;
  244.          if (var9 >= var4) {
  245.             return;
  246.          }
  247.  
  248.          var7 += var8 * var9;
  249.          var2 += var9;
  250.          var4 -= var9;
  251.       }
  252.  
  253.       if (var2 + var4 > this.dstY + this.dstH) {
  254.          var4 = this.dstY + this.dstH - var2;
  255.          if (var4 <= 0) {
  256.             return;
  257.          }
  258.       }
  259.  
  260.       if (var1 < this.dstX) {
  261.          int var14 = this.dstX - var1;
  262.          if (var14 >= var3) {
  263.             return;
  264.          }
  265.  
  266.          var7 += var14;
  267.          var1 += var14;
  268.          var3 -= var14;
  269.       }
  270.  
  271.       if (var1 + var3 > this.dstX + this.dstW) {
  272.          var3 = this.dstX + this.dstW - var1;
  273.          if (var3 <= 0) {
  274.             return;
  275.          }
  276.       }
  277.  
  278.       if (this.intPixels == null) {
  279.          if (this.bytePixels == null) {
  280.             this.intPixels = new int[this.dstW * this.dstH];
  281.             this.dstScan = this.dstW;
  282.             this.dstOff = 0;
  283.             this.imageModel = var5;
  284.          } else {
  285.             this.convertToRGB();
  286.          }
  287.       }
  288.  
  289.       int var15 = this.dstOff + (var2 - this.dstY) * this.dstScan + (var1 - this.dstX);
  290.       if (this.imageModel == var5) {
  291.          for(int var10 = var4; var10 > 0; --var10) {
  292.             System.arraycopy(var6, var7, this.intPixels, var15, var3);
  293.             var7 += var8;
  294.             var15 += this.dstScan;
  295.          }
  296.       } else {
  297.          if (this.imageModel != ColorModel.getRGBdefault()) {
  298.             this.convertToRGB();
  299.          }
  300.  
  301.          int var16 = this.dstScan - var3;
  302.          int var11 = var8 - var3;
  303.  
  304.          for(int var12 = var4; var12 > 0; --var12) {
  305.             for(int var13 = var3; var13 > 0; --var13) {
  306.                this.intPixels[var15++] = var5.getRGB(var6[var7++]);
  307.             }
  308.  
  309.             var7 += var11;
  310.             var15 += var16;
  311.          }
  312.       }
  313.  
  314.       this.flags |= 8;
  315.    }
  316.  
  317.    public synchronized void imageComplete(int var1) {
  318.       this.grabbing = false;
  319.       switch (var1) {
  320.          case 1:
  321.          default:
  322.             this.flags |= 192;
  323.             break;
  324.          case 2:
  325.             this.flags |= 16;
  326.             break;
  327.          case 3:
  328.             this.flags |= 32;
  329.             break;
  330.          case 4:
  331.             this.flags |= 128;
  332.       }
  333.  
  334.       this.producer.removeConsumer(this);
  335.       this.notifyAll();
  336.    }
  337.  
  338.    public synchronized int status() {
  339.       return this.flags;
  340.    }
  341. }
  342.