Class MemoryImageSource

Class java.awt.image.MemoryImageSource

Class Members | This Package | All Packages
java.lang.Object
   |
   +----java.awt.image.MemoryImageSource

public class MemoryImageSource
extends Object
implements ImageProducer

This class is an implementation of the ImageProducer interface which uses an array to produce pixel values for an Image. Here is an example which calculates a 100x100 image representing a fade from black to blue along the X axis and a fade from black to red along the Y axis:

	int w = 100;
	int h = 100;
	int pix[] = new int[w * h];
	int index = 0;
	for (int y = 0; y < h; y++) {
	    int red = (y * 255) / (h - 1);
	    for (int x = 0; x < w; x++) {
		int blue = (x * 255) / (w - 1);
		pix[index++] = (255 << 24) | (red << 16) | blue;
	    }
	}
	Image img = createImage(new MemoryImageSource(w, h, pix, 0, w));
 
The MemoryImageSource is also capable of managing a memory image which varies over time to allow animation or custom rendering. Here is an example showing how to set up the animation source and signal changes in the data (adapted from the MemoryAnimationSourceDemo by Garth Dickie):
	int pixels[];
	MemoryImageSource source;
	public void init() {
	    int width = 50;
	    int height = 50;
	    int size = width * height;
	    pixels = new int[size];
	    int value = getBackground().getRGB();
	    for (int i = 0; i < size; i++) {
		pixels[i] = value;
	    }
	    source = new MemoryImageSource(width, height, pixels, 0, width);
	    source.setAnimated(true);
	    image = createImage(source);
	}
	public void run() {
	    Thread me = Thread.currentThread( );
	    me.setPriority(Thread.MIN_PRIORITY);
	    while (true) {
		try {
		    thread.sleep(10);
		} catch( InterruptedException e ) {
		    return;
		}
		// Modify the values in the pixels array at (x, y, w, h)
		// Send the new data to the interested ImageConsumers
		source.newPixels(x, y, w, h);
	    }
	}
 

See Also:
ImageProducer