FileDocCategorySizeDatePackage
ImageSequence.javaAPI DocExample1628Mon Jan 08 17:28:22 GMT 1996None

ImageSequence.java

import java.awt.image.*;
import java.util.*;

public class ImageSequence extends Thread implements ImageProducer {
    int width, height, delay;
    ColorModel model = ColorModel.getRGBdefault();
	FrameARGBData frameData;
    private Vector consumers = new Vector();

	public void run() {
		while ( frameData != null ) {
			frameData.nextFrame();
			sendFrame();
			try {
				sleep( delay );
			} catch ( InterruptedException e ) {}
		}
	}

    public ImageSequence(FrameARGBData src, int maxFPS ) {
		frameData = src;
		width = frameData.size().width;
		height = frameData.size().height;
		delay = 1000/maxFPS;
		setPriority( MIN_PRIORITY + 1 );
    }

    public synchronized void addConsumer(ImageConsumer c) {
		if ( isConsumer( c ) ) 
			return;

		consumers.addElement( c );
	    c.setHints(ImageConsumer.TOPDOWNLEFTRIGHT |
				 ImageConsumer.SINGLEPASS );
	    c.setDimensions( width, height );
	    c.setProperties( new Hashtable() );
	    c.setColorModel( model );
	}

    public synchronized boolean isConsumer(ImageConsumer c) {
		return ( consumers.contains( c ) );
    }

    public synchronized void removeConsumer(ImageConsumer c) {
		consumers.removeElement( c );
    }

    public void startProduction(ImageConsumer ic) {
		addConsumer(ic);
    }

    public void requestTopDownLeftRightResend(ImageConsumer ic) { }

	private void sendFrame() {
		for ( Enumeration e = consumers.elements(); e.hasMoreElements();  ) {
			ImageConsumer c = (ImageConsumer)e.nextElement();
			c.setPixels(0, 0, width, height, model, frameData.getPixels(), 0, width);
			c.imageComplete(ImageConsumer.SINGLEFRAMEDONE);
		}
    }
}