// Let me count the ways -- of creating various types of Image

import java.applet.Applet;
import java.awt.Component;
import java.awt.GraphicsConfiguration;
import java.awt.image.BufferedImage;
import java.awt.image.Image;
import java.awt.Toolkit;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;

// ways to create a BufferedImage (new style, to access pixels)
BufferedImage bufferedImage = ImageIO.read( file );
BufferedImage bufferedImage = ImageIO.read( imageInputStream );
BufferedImage bufferedImage = ImageIO.read( inputStream );
BufferedImage bufferedImage = ImageIO.read( url );
BufferedImage bufferedImage = new BufferedImage( colorModel, raster, premultiplied, properties );
BufferedImage bufferedImage = new BufferedImage( width, height, type );
BufferedImage bufferedImage = new BufferedImage( width, height, type, colorModel );

// Ways to create an Image (old style, just to paint on screen)
Image image = Applet.getImage( url );
Image image = Applet.getImage( url, name );
Image image = Component.createImage( imageProducer );
Image image = createImage( width, height );
Image image = GraphicsConfiguration.createCompatibleImage( width, height );
Image image = GraphicsConfiguration.createCompatibleImage( width, height, transparency );
Image image = new ImageIcon( filename ).getImage();
Image image = new ImageIcon( filename, description ).getImage();
Image image = new ImageIcon( image ).getImage();
Image image = new ImageIcon( image, description ).getImage();
Image image = new ImageIcon( imageData[] ).getImage();
Image image = new ImageIcon( imageData[], description ).getImage();
Image image = new ImageIcon( url ).getImage();
Image image = new ImageIcon( MyClass.class.getResource( "image/plus.png" ) ).getImage();
Image image = new ImageIcon( url, description ).getImage();

Image image = Toolkit.createImage( filename );
Image image = Toolkit.createImage( imageData[] );
Image image = Toolkit.createImage( imageData[], offset, length );
Image image = Toolkit.createImage( producer );
Image image = Toolkit.createImage( url );
Image image = Toolkit.getImage( filename );
Image image = Toolkit.getImage( url );

// ways to create an ImageIcon
ImageIcon ii = new ImageIcon( filename );
ImageIcon ii = new ImageIcon( filename, description );
ImageIcon ii = new ImageIcon( image );
ImageIcon ii = new ImageIcon( image, description );
ImageIcon ii = new ImageIcon( imageData[] );
ImageIcon ii = new ImageIcon( imageData[], description );
ImageIcon ii = new ImageIcon( url );
ImageIcon ii = new ImageIcon( MyClass.class.getResource( "image/plus.png" ) ); // <-- most common
ImageIcon ii = new ImageIcon( url, description );

// ways to create a VolatileImage (for high speed)
VolatileImage volatileImage = Component.createVolatileImage( width, height );
VolatileImage volatileImage = Component.createVolatileImage( width, height, capabilities );
VolatileImage volatileImage = GraphicsConfiguration.createCompatibleVolatileImage( width, height );
VolatileImage volatileImage = GraphicsConfiguration.createCompatibleVolatileImage( width, height, capabilities );