Java tutorial
/* * @(#)ImageFrame.java 0.90 9/19/00 Adam Doppelt */ import java.awt.*; import java.awt.image.MemoryImageSource; import java.io.File; import java.io.IOException; /** * A frame that displays an image. Create an ImageFrame, then use one * of the setImage() methods to show the image. * * @version 0.90 19 Sep 2000 * @author <a href="http://www.gurge.com/amd/">Adam Doppelt</a> */ public class ImageFrame extends Frame { int left = -1; int top; Image image; ImageFrame() { setLayout(null); setSize(100, 100); } /** * Set the image from a file. */ public void setImage(File file) throws IOException { // load the image Image image = getToolkit().getImage(file.getAbsolutePath()); // wait for the image to entirely load MediaTracker tracker = new MediaTracker(this); tracker.addImage(image, 0); try { tracker.waitForID(0); } catch (InterruptedException e) { e.printStackTrace(); } if (tracker.statusID(0, true) != MediaTracker.COMPLETE) { throw new IOException("Could not load: " + file + " " + tracker.statusID(0, true)); } setTitle(file.getName()); setImage(image); } /** * Set the image from an AWT image object. */ public void setImage(Image image) { this.image = image; setVisible(true); } /** * Set the image from an indexed color array. */ public void setImage(int palette[], int pixels[][]) { int w = pixels.length; int h = pixels[0].length; int pix[] = new int[w * h]; // convert to RGB for (int x = w; x-- > 0;) { for (int y = h; y-- > 0;) { pix[y * w + x] = palette[pixels[x][y]]; } } setImage(w, h, pix); } /** * Set the image from a 2D RGB pixel array. */ public void setImage(int pixels[][]) { int w = pixels.length; int h = pixels[0].length; int pix[] = new int[w * h]; // convert to RGB for (int x = w; x-- > 0;) { for (int y = h; y-- > 0;) { pix[y * w + x] = pixels[x][y]; } } setImage(w, h, pix); } /** * Set the image from a 1D RGB pixel array. */ public void setImage(int w, int h, int pix[]) { setImage(createImage(new MemoryImageSource(w, h, pix, 0, w))); } /** * Get the image. */ public Image getImage() { return image; } /** * Overridden for double buffering. */ public void update(Graphics g) { paint(g); } /** * Paint the image. */ public void paint(Graphics g) { // the first time through, figure out where to draw the image if (left == -1) { Insets insets = getInsets(); left = insets.left; top = insets.top; setSize(image.getWidth(null) + left + insets.right, image.getHeight(null) + top + insets.bottom); } g.drawImage(image, left, top, this); } public static void main(String args[]) throws IOException { ImageFrame f = new ImageFrame(); f.setImage(new File(args[0])); } }