home | O'Reilly's CD bookshelfs | FreeBSD | Linux | Cisco | Cisco Exam  

Java AWT

Previous Appendix D
Image Loading

D.2 A Brief Tour of sun.awt.image

The classes in sun.awt.image do the behind-the-scenes work for rendering an image from a file or across the network. This information is purely for the curious; you should never have to work with these classes yourself.


The Image class in this package represents a concrete Image instance. It contains the basis for the Image class that is actually used on the run-time platform, which exists in the package for the specific environment. For instance, the sun.awt.win32 package includes the W32Image (  Java 1.0), the sun.awt.windows package includes WImage (  Java 1.1), while the sun.awt.motif package includes the X11Image, and the sun.awt.macos package includes the MacImage.


The ImageRepresentation is the ImageConsumer that watches the creation of the image and notifies the ImageObserver when it is time to update the display. It plays an important part in the overall control of the Image production process.

Image sources

A Java image can come from three different sources: memory (through createImage()), local disk, or the network (through getImage()).

  • OffScreenImageSource implements ImageProducer for a single framed image in memory. When an Image created from an OffScreenImageSource is drawn with drawImage(), the ImageObserver parameter can be null since all the image information is already in memory and there is no need for periodic updating as more is retrieved from disk. You can get the graphics context of OffScreenImageSource images and use the context to draw on the image area. This is how double buffering works.

  • InputStreamImageSource implements ImageProducer for an image that comes from disk or across the network. When an Image created from an InputStreamImageSource is drawn with drawImage(), the ImageObserver parameter should be the component being drawn on (usually this) since the image information will be loaded periodically with the help of the ImageObserver interface). This class determines how to decode the image type and initializes the ImageDecoder to one of GifImageDecoder, JPEGImageDecoder, or XbmImageDecoder, although that can be overridden by a subclass. It can use a ContentHandler to work with unknown image types.

  • FileImageSource is a subclass of InputStreamImageSource for images that come from the filesystem. It uses the filename to determine the type of image to decode and checks the security manager to ensure that access is allowed.

  • URLImageSource is a subclass of InputStreamImageSource for images that are specified by a URL.

  • ByteArrayImageSource (  Java 1.1 only) is a subclass of InputStreamImageSource for images that are created by calling Toolkit.createImage(byte[]).

Image decoders

An ImageDecoder is utilized to convert the image source to an image object. If there is no decoder for an image type, it can be read in with the help of a ContentHandler or your own class that implements ImageProducer, like the PPMImageDecoder shown in Chapter 12, Image Processing.

  • GifImageDecoder reads in an image file in the GIF format.

  • JPEGImageDecoder reads in an image file in the JPEG format.

  • XbmImageDecoder reads in an image file in the XBM format. Although XBM support is not required by the language specification, support is provided with Netscape Navigator, Internet Explorer, HotJava, and the Java Developer's Kit from Sun.


The ImageFetcher class fetches the actual image from its source. This class creates a separate daemon thread to fetch each image. The thread is run at a higher priority than the default but not at the maximum priority.

Previous Home  
How Images are Loaded Book Index  

Java in a Nutshell Java Language Reference Java AWT Java Fundamental Classes Exploring Java