Browse DevX
Sign up for e-mail newsletters from DevX

Tip of the Day
Language: Java
Expertise: Advanced
Mar 24, 1999



Building the Right Environment to Support AI, Machine Learning and Deep Learning

Serialize Image Instances

The java.awt.Image class does not implement the java.io.Serializable 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) throws
InterruptedException {
	int[] pixels = new int[width * height];
	PixelGrabber pg = new PixelGrabber(img, 0, 0, width, height, pixels,
0, width);
	return pixels;
}  //  private int[] getArrayFromImage()
To convert the array back into an instance of Image, use the java.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.
Brett Spell
Comment and Contribute






(Maximum characters: 1200). You have 1200 characters left.



Thanks for your registration, follow us on our social networks to keep up-to-date