home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 June / CHIPHEFT062001.ISO / browser / nc32lyc / comm.z / java40.jar / java / awt / image / MemoryImageSource.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-08-15  |  4.9 KB  |  252 lines

  1. package java.awt.image;
  2.  
  3. import java.util.Enumeration;
  4. import java.util.Hashtable;
  5. import java.util.Vector;
  6.  
  7. public class MemoryImageSource implements ImageProducer {
  8.    int width;
  9.    int height;
  10.    ColorModel model;
  11.    Object pixels;
  12.    int pixeloffset;
  13.    int pixelscan;
  14.    Hashtable properties;
  15.    Vector theConsumers = new Vector();
  16.    boolean animating;
  17.    boolean fullbuffers;
  18.  
  19.    public MemoryImageSource(int var1, int var2, ColorModel var3, byte[] var4, int var5, int var6) {
  20.       this.initialize(var1, var2, var3, var4, var5, var6, (Hashtable)null);
  21.    }
  22.  
  23.    public MemoryImageSource(int var1, int var2, ColorModel var3, byte[] var4, int var5, int var6, Hashtable var7) {
  24.       this.initialize(var1, var2, var3, var4, var5, var6, var7);
  25.    }
  26.  
  27.    public MemoryImageSource(int var1, int var2, ColorModel var3, int[] var4, int var5, int var6) {
  28.       this.initialize(var1, var2, var3, var4, var5, var6, (Hashtable)null);
  29.    }
  30.  
  31.    public MemoryImageSource(int var1, int var2, ColorModel var3, int[] var4, int var5, int var6, Hashtable var7) {
  32.       this.initialize(var1, var2, var3, var4, var5, var6, var7);
  33.    }
  34.  
  35.    private void checkParameters(int var1, int var2, Object var3, int var4, int var5) {
  36.       if (var1 > var5) {
  37.          throw new IllegalArgumentException("Scan line size cannot be smaller than image width.");
  38.       } else {
  39.          int var6 = 0;
  40.          if (var3 instanceof int[]) {
  41.             var6 = ((int[])var3).length;
  42.          } else if (var3 instanceof byte[]) {
  43.             var6 = ((byte[])var3).length;
  44.          }
  45.  
  46.          if (var6 < var2 * var5 + var4) {
  47.             throw new IllegalArgumentException("Pixel array too small for image.");
  48.          }
  49.       }
  50.    }
  51.  
  52.    private void initialize(int var1, int var2, ColorModel var3, Object var4, int var5, int var6, Hashtable var7) {
  53.       this.checkParameters(var1, var2, var4, var5, var6);
  54.       this.width = var1;
  55.       this.height = var2;
  56.       this.model = var3;
  57.       this.pixels = var4;
  58.       this.pixeloffset = var5;
  59.       this.pixelscan = var6;
  60.       if (var7 == null) {
  61.          var7 = new Hashtable();
  62.       }
  63.  
  64.       this.properties = var7;
  65.    }
  66.  
  67.    public MemoryImageSource(int var1, int var2, int[] var3, int var4, int var5) {
  68.       this.initialize(var1, var2, ColorModel.getRGBdefault(), var3, var4, var5, (Hashtable)null);
  69.    }
  70.  
  71.    public MemoryImageSource(int var1, int var2, int[] var3, int var4, int var5, Hashtable var6) {
  72.       this.initialize(var1, var2, ColorModel.getRGBdefault(), var3, var4, var5, var6);
  73.    }
  74.  
  75.    public synchronized void addConsumer(ImageConsumer var1) {
  76.       if (!this.theConsumers.contains(var1)) {
  77.          this.theConsumers.addElement(var1);
  78.  
  79.          try {
  80.             this.initConsumer(var1);
  81.             this.sendPixels(var1, 0, 0, this.width, this.height);
  82.             if (this.isConsumer(var1)) {
  83.                var1.imageComplete(this.animating ? 2 : 3);
  84.                if (!this.animating && this.isConsumer(var1)) {
  85.                   var1.imageComplete(1);
  86.                   this.removeConsumer(var1);
  87.                   return;
  88.                }
  89.             }
  90.          } catch (Exception var2) {
  91.             if (this.isConsumer(var1)) {
  92.                var1.imageComplete(1);
  93.             }
  94.          }
  95.  
  96.       }
  97.    }
  98.  
  99.    public synchronized boolean isConsumer(ImageConsumer var1) {
  100.       return this.theConsumers.contains(var1);
  101.    }
  102.  
  103.    public synchronized void removeConsumer(ImageConsumer var1) {
  104.       this.theConsumers.removeElement(var1);
  105.    }
  106.  
  107.    public void startProduction(ImageConsumer var1) {
  108.       this.addConsumer(var1);
  109.    }
  110.  
  111.    public void requestTopDownLeftRightResend(ImageConsumer var1) {
  112.    }
  113.  
  114.    public synchronized void setAnimated(boolean var1) {
  115.       this.animating = var1;
  116.       if (!this.animating) {
  117.          Enumeration var2 = this.theConsumers.elements();
  118.  
  119.          while(var2.hasMoreElements()) {
  120.             ImageConsumer var3 = (ImageConsumer)var2.nextElement();
  121.             var3.imageComplete(3);
  122.             if (this.isConsumer(var3)) {
  123.                var3.imageComplete(1);
  124.             }
  125.          }
  126.  
  127.          this.theConsumers.removeAllElements();
  128.       }
  129.  
  130.    }
  131.  
  132.    public synchronized void setFullBufferUpdates(boolean var1) {
  133.       if (this.fullbuffers != var1) {
  134.          this.fullbuffers = var1;
  135.          if (this.animating) {
  136.             Enumeration var2 = this.theConsumers.elements();
  137.  
  138.             while(var2.hasMoreElements()) {
  139.                ImageConsumer var3 = (ImageConsumer)var2.nextElement();
  140.                var3.setHints(var1 ? 6 : 1);
  141.             }
  142.          }
  143.  
  144.       }
  145.    }
  146.  
  147.    public void newPixels() {
  148.       this.newPixels(0, 0, this.width, this.height, true);
  149.    }
  150.  
  151.    public synchronized void newPixels(int var1, int var2, int var3, int var4) {
  152.       this.newPixels(var1, var2, var3, var4, true);
  153.    }
  154.  
  155.    public synchronized void newPixels(int var1, int var2, int var3, int var4, boolean var5) {
  156.       if (this.animating) {
  157.          if (this.fullbuffers) {
  158.             var2 = 0;
  159.             var1 = 0;
  160.             var3 = this.width;
  161.             var4 = this.height;
  162.          } else {
  163.             if (var1 < 0) {
  164.                var3 += var1;
  165.                var1 = 0;
  166.             }
  167.  
  168.             if (var1 + var3 > this.width) {
  169.                var3 = this.width - var1;
  170.             }
  171.  
  172.             if (var2 < 0) {
  173.                var4 += var2;
  174.                var2 = 0;
  175.             }
  176.  
  177.             if (var2 + var4 > this.height) {
  178.                var4 = this.height - var2;
  179.             }
  180.          }
  181.  
  182.          if ((var3 <= 0 || var4 <= 0) && !var5) {
  183.             return;
  184.          }
  185.  
  186.          Enumeration var6 = this.theConsumers.elements();
  187.  
  188.          while(var6.hasMoreElements()) {
  189.             ImageConsumer var7 = (ImageConsumer)var6.nextElement();
  190.             if (var3 > 0 && var4 > 0) {
  191.                this.sendPixels(var7, var1, var2, var3, var4);
  192.             }
  193.  
  194.             if (var5 && this.isConsumer(var7)) {
  195.                var7.imageComplete(2);
  196.             }
  197.          }
  198.       }
  199.  
  200.    }
  201.  
  202.    public synchronized void newPixels(byte[] var1, ColorModel var2, int var3, int var4) {
  203.       this.checkParameters(this.width, this.height, var1, var3, var4);
  204.       this.pixels = var1;
  205.       this.model = var2;
  206.       this.pixeloffset = var3;
  207.       this.pixelscan = var4;
  208.       this.newPixels();
  209.    }
  210.  
  211.    public synchronized void newPixels(int[] var1, ColorModel var2, int var3, int var4) {
  212.       this.checkParameters(this.width, this.height, var1, var3, var4);
  213.       this.pixels = var1;
  214.       this.model = var2;
  215.       this.pixeloffset = var3;
  216.       this.pixelscan = var4;
  217.       this.newPixels();
  218.    }
  219.  
  220.    private void initConsumer(ImageConsumer var1) {
  221.       if (this.isConsumer(var1)) {
  222.          var1.setDimensions(this.width, this.height);
  223.       }
  224.  
  225.       if (this.isConsumer(var1)) {
  226.          var1.setProperties(this.properties);
  227.       }
  228.  
  229.       if (this.isConsumer(var1)) {
  230.          var1.setColorModel(this.model);
  231.       }
  232.  
  233.       if (this.isConsumer(var1)) {
  234.          var1.setHints(this.animating ? (this.fullbuffers ? 6 : 1) : 30);
  235.       }
  236.  
  237.    }
  238.  
  239.    private void sendPixels(ImageConsumer var1, int var2, int var3, int var4, int var5) {
  240.       int var6 = this.pixeloffset + this.pixelscan * var3 + var2;
  241.       if (this.isConsumer(var1)) {
  242.          if (this.pixels instanceof byte[]) {
  243.             var1.setPixels(var2, var3, var4, var5, this.model, (byte[])this.pixels, var6, this.pixelscan);
  244.             return;
  245.          }
  246.  
  247.          var1.setPixels(var2, var3, var4, var5, this.model, (int[])this.pixels, var6, this.pixelscan);
  248.       }
  249.  
  250.    }
  251. }
  252.