As you have already learned from the Overview
lesson, Images are described by a width and a height, measured in pixels,
and have a coordinate system that is independent of the drawing surface.
There are a number of common tasks when working with images.
This lesson teaches you the basics of loading, displaying, and saving images.
The are two main classes that you must learn about to work with images:
java.awt.Image class is the superclass that
represents graphical images as rectangular arrays of pixels.
java.awt.image.BufferedImage class, which extends the Image class to allow the application to operate directly with image 
data (for example, retrieving or setting up the pixel color). Applications can
directly construct instances of this class.
The BufferedImage class is a cornerstone of the Java 2D immediate-mode
imaging API. It manages the image in memory and provides methods for storing, interpreting,
and obtaining pixel data.
Since BufferedImage is a subclass of Image it can be rendered by the
Graphics and Graphics2D methods that accept an Image parameter.
A BufferedImage is essentially an Image with an accessible data buffer.
It is therefore more efficient to work directly with BufferedImage.
A BufferedImage has a ColorModel and a 
Raster of image data. The ColorModel provides a color interpretation of the image's pixel data.
The Raster performs the following functions:
The basic operations with images are represented in the following sections:
drawImage
    method of the Graphics and Graphics2D classes.