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