Serialize Image Instances

Serialize Image Instances

The java.awt.Image class does not implement the interface. As a result, attempts to serialize or “marshal” instances of the class will fail. For example, they cannot be passed as parameters or return values via RMI the way most other objects can. Fortunately, there is a fairly simple way to get around this problem: convert the image into an array that can be serialized, and then when the image has been transmitted across the network, convert the array back into an Image instance. Aside from the Image instance itself, all you need are the width and height of the image, both of which you can obtain using methods int the Image class. To convert the Image into an array that can be serialized, use the java.awt.image.PixelGrabber class to copy the image data into an array of int values:

 private int[] getArrayFromImage(Image img, int width, int height) throwsInterruptedException {	int[] pixels = new int[width * height];	PixelGrabber pg = new PixelGrabber(img, 0, 0, width, height, pixels,0, width);	pg.grabPixels();	return pixels;}  //  private int[] getArrayFromImage()

To convert the array back into an instance of Image, use thejava.awt.image.MemoryImageSource class along with java.awt.Toolkit:

 private Image getImageFromArray(int[] pixels, int width, int height) {	MemoryImageSource mis = new MemoryImageSource(width, height, pixels,0, width);	Toolkit tk = Toolkit.getDefaultToolkit();	return tk.createImage(mis);}  //  private Image getImageFromArray()

Using this simple technique, a wrapper class can easily be created which makes serializing instances of the Image class transparent to an application.


Share the Post: