APIdia Launch Partner
Top Description Fields Constructors Methods
java.awt.image

public Class MemoryImageSource

extends Object
implements ImageProducer
Class Inheritance
All Implemented Interfaces
java.awt.image.ImageProducer
Imports
java.awt.image.ImageConsumer, .ImageProducer, .ColorModel, java.util.Hashtable, .Vector, .Enumeration

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);
         }
     }

Authors
Jim Graham, Animation capabilities inspired by the MemoryAnimationSource class written by Garth Dickie
See Also
ImageProducer

Field Summary

Modifier and TypeField and Description
pack-priv boolean
pack-priv boolean
pack-priv int
pack-priv ColorModel
pack-priv int
pack-priv Object
pack-priv int
pack-priv Hashtable<?, ?>
pack-priv Vector<ImageConsumer>
pack-priv int

Constructor Summary

AccessConstructor and Description
public
MemoryImageSource(int
the width of the rectangle of pixels
w
,
int
the height of the rectangle of pixels
h
,
ColorModel
the specified ColorModel
cm
,
byte[]
an array of pixels
pix
,
int
the offset into the array of where to store the first pixel
off
,
int
the distance from one row of pixels to the next in the array
scan
)

Constructs an ImageProducer object which uses an array of bytes to produce data for an Image object.

public
MemoryImageSource(int
the width of the rectangle of pixels
w
,
int
the height of the rectangle of pixels
h
,
ColorModel
the specified ColorModel
cm
,
byte[]
an array of pixels
pix
,
int
the offset into the array of where to store the first pixel
off
,
int
the distance from one row of pixels to the next in the array
scan
,
Hashtable<?, ?>
a list of properties that the ImageProducer uses to process an image
props
)

Constructs an ImageProducer object which uses an array of bytes to produce data for an Image object.

public
MemoryImageSource(int
the width of the rectangle of pixels
w
,
int
the height of the rectangle of pixels
h
,
ColorModel
the specified ColorModel
cm
,
int[]
an array of pixels
pix
,
int
the offset into the array of where to store the first pixel
off
,
int
the distance from one row of pixels to the next in the array
scan
)

Constructs an ImageProducer object which uses an array of integers to produce data for an Image object.

public
MemoryImageSource(int
the width of the rectangle of pixels
w
,
int
the height of the rectangle of pixels
h
,
ColorModel
the specified ColorModel
cm
,
int[]
an array of pixels
pix
,
int
the offset into the array of where to store the first pixel
off
,
int
the distance from one row of pixels to the next in the array
scan
,
Hashtable<?, ?>
a list of properties that the ImageProducer uses to process an image
props
)

Constructs an ImageProducer object which uses an array of integers to produce data for an Image object.

public
MemoryImageSource(int
the width of the rectangle of pixels
w
,
int
the height of the rectangle of pixels
h
,
int[]
an array of pixels
pix
,
int
the offset into the array of where to store the first pixel
off
,
int
the distance from one row of pixels to the next in the array
scan
)

Constructs an ImageProducer object which uses an array of integers in the default RGB ColorModel to produce data for an Image object.

public
MemoryImageSource(int
the width of the rectangle of pixels
w
,
int
the height of the rectangle of pixels
h
,
int[]
an array of pixels
pix
,
int
the offset into the array of where to store the first pixel
off
,
int
the distance from one row of pixels to the next in the array
scan
,
Hashtable<?, ?>
a list of properties that the ImageProducer uses to process an image
props
)

Constructs an ImageProducer object which uses an array of integers in the default RGB ColorModel to produce data for an Image object.

Method Summary

Modifier and TypeMethod and Description
public synchronized void
addConsumer(ImageConsumer
the specified ImageConsumer
ic
)

Implements java.awt.image.ImageProducer.addConsumer.

Adds an ImageConsumer to the list of consumers interested in data for this image.

private void
private void
initialize(int w, int h, ColorModel cm, Object pix, int off, int scan, Hashtable<?, ?> props)

public synchronized boolean

Returns:

true if the ImageConsumer is on the list; false otherwise.
isConsumer
(ImageConsumer
the specified ImageConsumer
ic
)

Implements java.awt.image.ImageProducer.isConsumer.

Determines if an ImageConsumer is on the list of consumers currently interested in data for this image.

public void
newPixels()

Sends a whole new buffer of pixels to any ImageConsumers that are currently interested in the data for this image and notify them that an animation frame is complete.

public synchronized void
newPixels(int
the x coordinate of the upper left corner of the rectangle of pixels to be sent
x
,
int
the y coordinate of the upper left corner of the rectangle of pixels to be sent
y
,
int
the width of the rectangle of pixels to be sent
w
,
int
the height of the rectangle of pixels to be sent
h
)

Sends a rectangular region of the buffer of pixels to any ImageConsumers that are currently interested in the data for this image and notify them that an animation frame is complete.

public synchronized void
newPixels(int
the x coordinate of the upper left corner of the rectangle of pixels to be sent
x
,
int
the y coordinate of the upper left corner of the rectangle of pixels to be sent
y
,
int
the width of the rectangle of pixels to be sent
w
,
int
the height of the rectangle of pixels to be sent
h
,
boolean
true if the consumers should be sent a SINGLEFRAMEDONE notification
framenotify
)

Sends a rectangular region of the buffer of pixels to any ImageConsumers that are currently interested in the data for this image.

public synchronized void
newPixels(byte[]
the new pixel array
newpix
,
ColorModel
the specified ColorModel
newmodel
,
int
the offset into the array
offset
,
int
the distance from one row of pixels to the next in the array
scansize
)

Changes to a new byte array to hold the pixels for this image.

public synchronized void
newPixels(int[]
the new pixel array
newpix
,
ColorModel
the specified ColorModel
newmodel
,
int
the offset into the array
offset
,
int
the distance from one row of pixels to the next in the array
scansize
)

Changes to a new int array to hold the pixels for this image.

public synchronized void
removeConsumer(ImageConsumer
the specified ImageConsumer
ic
)

Implements java.awt.image.ImageProducer.removeConsumer.

Removes an ImageConsumer from the list of consumers interested in data for this image.

public void
requestTopDownLeftRightResend(ImageConsumer
the specified ImageConsumer
ic
)

Implements java.awt.image.ImageProducer.requestTopDownLeftRightResend.

Requests that a given ImageConsumer have the image data delivered one more time in top-down, left-right order.

private void
sendPixels(ImageConsumer ic, int x, int y, int w, int h)

public synchronized void
setAnimated(boolean
true if the image is a multi-frame animation
animated
)

Changes this memory image into a multi-frame animation or a single-frame static image depending on the animated parameter.

public synchronized void
setFullBufferUpdates(boolean
true if the complete pixel buffer should always be sent
fullbuffers
)

Specifies whether this animated memory image should always be updated by sending the complete buffer of pixels whenever there is a change.

public void
startProduction(ImageConsumer
the specified ImageConsumer image data through the ImageConsumer interface.
ic
)

Implements java.awt.image.ImageProducer.startProduction.

Adds an ImageConsumer to the list of consumers interested in data for this image and immediately starts delivery of the image data through the ImageConsumer interface.

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

animatingback to summary
pack-priv boolean animating
fullbuffersback to summary
pack-priv boolean fullbuffers
heightback to summary
pack-priv int height
modelback to summary
pack-priv ColorModel model
pixeloffsetback to summary
pack-priv int pixeloffset
pixelsback to summary
pack-priv Object pixels
pixelscanback to summary
pack-priv int pixelscan
propertiesback to summary
pack-priv Hashtable<?, ?> properties
theConsumersback to summary
pack-priv Vector<ImageConsumer> theConsumers
widthback to summary
pack-priv int width

Constructor Detail

MemoryImageSourceback to summary
public MemoryImageSource(int w, int h, ColorModel cm, byte[] pix, int off, int scan)

Constructs an ImageProducer object which uses an array of bytes to produce data for an Image object.

Parameters
w:int

the width of the rectangle of pixels

h:int

the height of the rectangle of pixels

cm:ColorModel

the specified ColorModel

pix:byte[]

an array of pixels

off:int

the offset into the array of where to store the first pixel

scan:int

the distance from one row of pixels to the next in the array

See Also
java.awt.Component#createImage
MemoryImageSourceback to summary
public MemoryImageSource(int w, int h, ColorModel cm, byte[] pix, int off, int scan, Hashtable<?, ?> props)

Constructs an ImageProducer object which uses an array of bytes to produce data for an Image object.

Parameters
w:int

the width of the rectangle of pixels

h:int

the height of the rectangle of pixels

cm:ColorModel

the specified ColorModel

pix:byte[]

an array of pixels

off:int

the offset into the array of where to store the first pixel

scan:int

the distance from one row of pixels to the next in the array

props:Hashtable<?, ?>

a list of properties that the ImageProducer uses to process an image

See Also
java.awt.Component#createImage
MemoryImageSourceback to summary
public MemoryImageSource(int w, int h, ColorModel cm, int[] pix, int off, int scan)

Constructs an ImageProducer object which uses an array of integers to produce data for an Image object.

Parameters
w:int

the width of the rectangle of pixels

h:int

the height of the rectangle of pixels

cm:ColorModel

the specified ColorModel

pix:int[]

an array of pixels

off:int

the offset into the array of where to store the first pixel

scan:int

the distance from one row of pixels to the next in the array

See Also
java.awt.Component#createImage
MemoryImageSourceback to summary
public MemoryImageSource(int w, int h, ColorModel cm, int[] pix, int off, int scan, Hashtable<?, ?> props)

Constructs an ImageProducer object which uses an array of integers to produce data for an Image object.

Parameters
w:int

the width of the rectangle of pixels

h:int

the height of the rectangle of pixels

cm:ColorModel

the specified ColorModel

pix:int[]

an array of pixels

off:int

the offset into the array of where to store the first pixel

scan:int

the distance from one row of pixels to the next in the array

props:Hashtable<?, ?>

a list of properties that the ImageProducer uses to process an image

See Also
java.awt.Component#createImage
MemoryImageSourceback to summary
public MemoryImageSource(int w, int h, int[] pix, int off, int scan)

Constructs an ImageProducer object which uses an array of integers in the default RGB ColorModel to produce data for an Image object.

Parameters
w:int

the width of the rectangle of pixels

h:int

the height of the rectangle of pixels

pix:int[]

an array of pixels

off:int

the offset into the array of where to store the first pixel

scan:int

the distance from one row of pixels to the next in the array

See Also
java.awt.Component#createImage, ColorModel#getRGBdefault
MemoryImageSourceback to summary
public MemoryImageSource(int w, int h, int[] pix, int off, int scan, Hashtable<?, ?> props)

Constructs an ImageProducer object which uses an array of integers in the default RGB ColorModel to produce data for an Image object.

Parameters
w:int

the width of the rectangle of pixels

h:int

the height of the rectangle of pixels

pix:int[]

an array of pixels

off:int

the offset into the array of where to store the first pixel

scan:int

the distance from one row of pixels to the next in the array

props:Hashtable<?, ?>

a list of properties that the ImageProducer uses to process an image

See Also
java.awt.Component#createImage, ColorModel#getRGBdefault

Method Detail

addConsumerback to summary
public synchronized void addConsumer(ImageConsumer ic)

Implements java.awt.image.ImageProducer.addConsumer.

Adds an ImageConsumer to the list of consumers interested in data for this image.

Parameters
ic:ImageConsumer

the specified ImageConsumer

Exceptions
NullPointerException:
if the specified ImageConsumer is null
See Also
ImageConsumer
initConsumerback to summary
private void initConsumer(ImageConsumer ic)
initializeback to summary
private void initialize(int w, int h, ColorModel cm, Object pix, int off, int scan, Hashtable<?, ?> props)
isConsumerback to summary
public synchronized boolean isConsumer(ImageConsumer ic)

Implements java.awt.image.ImageProducer.isConsumer.

Determines if an ImageConsumer is on the list of consumers currently interested in data for this image.

Parameters
ic:ImageConsumer

the specified ImageConsumer

Returns:boolean

true if the ImageConsumer is on the list; false otherwise.

See Also
ImageConsumer
newPixelsback to summary
public void newPixels()

Sends a whole new buffer of pixels to any ImageConsumers that are currently interested in the data for this image and notify them that an animation frame is complete. This method only has effect if the animation flag has been turned on through the setAnimated() method.

See Also
newPixels(int, int, int, int, boolean), ImageConsumer, setAnimated
newPixelsback to summary
public synchronized void newPixels(int x, int y, int w, int h)

Sends a rectangular region of the buffer of pixels to any ImageConsumers that are currently interested in the data for this image and notify them that an animation frame is complete. This method only has effect if the animation flag has been turned on through the setAnimated() method. If the full buffer update flag was turned on with the setFullBufferUpdates() method then the rectangle parameters will be ignored and the entire buffer will always be sent.

Parameters
x:int

the x coordinate of the upper left corner of the rectangle of pixels to be sent

y:int

the y coordinate of the upper left corner of the rectangle of pixels to be sent

w:int

the width of the rectangle of pixels to be sent

h:int

the height of the rectangle of pixels to be sent

See Also
newPixels(int, int, int, int, boolean), ImageConsumer, setAnimated, setFullBufferUpdates
newPixelsback to summary
public synchronized void newPixels(int x, int y, int w, int h, boolean framenotify)

Sends a rectangular region of the buffer of pixels to any ImageConsumers that are currently interested in the data for this image. If the framenotify parameter is true then the consumers are also notified that an animation frame is complete. This method only has effect if the animation flag has been turned on through the setAnimated() method. If the full buffer update flag was turned on with the setFullBufferUpdates() method then the rectangle parameters will be ignored and the entire buffer will always be sent.

Parameters
x:int

the x coordinate of the upper left corner of the rectangle of pixels to be sent

y:int

the y coordinate of the upper left corner of the rectangle of pixels to be sent

w:int

the width of the rectangle of pixels to be sent

h:int

the height of the rectangle of pixels to be sent

framenotify:boolean

true if the consumers should be sent a SINGLEFRAMEDONE notification

See Also
ImageConsumer, setAnimated, setFullBufferUpdates
newPixelsback to summary
public synchronized void newPixels(byte[] newpix, ColorModel newmodel, int offset, int scansize)

Changes to a new byte array to hold the pixels for this image. If the animation flag has been turned on through the setAnimated() method, then the new pixels will be immediately delivered to any ImageConsumers that are currently interested in the data for this image.

Parameters
newpix:byte[]

the new pixel array

newmodel:ColorModel

the specified ColorModel

offset:int

the offset into the array

scansize:int

the distance from one row of pixels to the next in the array

See Also
newPixels(int, int, int, int, boolean), setAnimated
newPixelsback to summary
public synchronized void newPixels(int[] newpix, ColorModel newmodel, int offset, int scansize)

Changes to a new int array to hold the pixels for this image. If the animation flag has been turned on through the setAnimated() method, then the new pixels will be immediately delivered to any ImageConsumers that are currently interested in the data for this image.

Parameters
newpix:int[]

the new pixel array

newmodel:ColorModel

the specified ColorModel

offset:int

the offset into the array

scansize:int

the distance from one row of pixels to the next in the array

See Also
newPixels(int, int, int, int, boolean), setAnimated
removeConsumerback to summary
public synchronized void removeConsumer(ImageConsumer ic)

Implements java.awt.image.ImageProducer.removeConsumer.

Removes an ImageConsumer from the list of consumers interested in data for this image.

Parameters
ic:ImageConsumer

the specified ImageConsumer

See Also
ImageConsumer
requestTopDownLeftRightResendback to summary
public void requestTopDownLeftRightResend(ImageConsumer ic)

Implements java.awt.image.ImageProducer.requestTopDownLeftRightResend.

Requests that a given ImageConsumer have the image data delivered one more time in top-down, left-right order.

Parameters
ic:ImageConsumer

the specified ImageConsumer

See Also
ImageConsumer
sendPixelsback to summary
private void sendPixels(ImageConsumer ic, int x, int y, int w, int h)
setAnimatedback to summary
public synchronized void setAnimated(boolean animated)

Changes this memory image into a multi-frame animation or a single-frame static image depending on the animated parameter.

This method should be called immediately after the MemoryImageSource is constructed and before an image is created with it to ensure that all ImageConsumers will receive the correct multi-frame data. If an ImageConsumer is added to this ImageProducer before this flag is set then that ImageConsumer will see only a snapshot of the pixel data that was available when it connected.

Parameters
animated:boolean

true if the image is a multi-frame animation

setFullBufferUpdatesback to summary
public synchronized void setFullBufferUpdates(boolean fullbuffers)

Specifies whether this animated memory image should always be updated by sending the complete buffer of pixels whenever there is a change. This flag is ignored if the animation flag is not turned on through the setAnimated() method.

This method should be called immediately after the MemoryImageSource is constructed and before an image is created with it to ensure that all ImageConsumers will receive the correct pixel delivery hints.

Parameters
fullbuffers:boolean

true if the complete pixel buffer should always be sent

See Also
setAnimated
startProductionback to summary
public void startProduction(ImageConsumer ic)

Implements java.awt.image.ImageProducer.startProduction.

Adds an ImageConsumer to the list of consumers interested in data for this image and immediately starts delivery of the image data through the ImageConsumer interface.

Parameters
ic:ImageConsumer

the specified ImageConsumer image data through the ImageConsumer interface.

See Also
ImageConsumer