//  Scale.java - scaling a GIF or JPG image
//
//  Usage:  java Scale <image file>

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Insets;
import javax.swing.ImageIcon;
import javax.swing.JFrame;

public class Scale extends JFrame {
    private Image image, original;
    private Insets insets;
    private static String IMAGE = "gif.gif";

    Scale() {
        ImageIcon icon = new ImageIcon(IMAGE);
        image = original = icon.getImage();
    }

    public void paint(Graphics g) {
        super.paint(g);
        if (insets == null)
            insets = getInsets();
        g.drawImage(image, insets.left, insets.top, this);
    }

    public void go() {
        setTitle("Original");
        sleep();

        image = original.getScaledInstance(50, -1, Image.SCALE_SMOOTH);
        repaint();
        setTitle("Scaled to 50 pixels");
        sleep();

        image = original.getScaledInstance(100, -1, Image.SCALE_SMOOTH);
        repaint();
        setTitle("Scaled to 100 pixels");
        sleep();

        image = original.getScaledInstance(150, -1, Image.SCALE_SMOOTH);
        repaint();
        setTitle("Scaled to 150 pixels");
        sleep();

        image = original.getScaledInstance(200, -1, Image.SCALE_SMOOTH);
        repaint();
        setTitle("Scaled to 200 pixels");
        sleep();

        image = original.getScaledInstance(300, 100, Image.SCALE_SMOOTH);
        repaint();
        setTitle("Scaled to 300x100 pixels");
        sleep();

        image = original.getScaledInstance(100, 300, Image.SCALE_SMOOTH);
        repaint();
        setTitle("Scaled to 100x300 pixels");
        sleep();

        System.exit(0);
    }

    private void sleep() {
        try {
            Thread.sleep(4000);
        } catch (InterruptedException ignored) {}
    }

    public static void main(String args[]) {
        if (args.length > 0)
            IMAGE = args[0];
        Scale f = new Scale();

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(340, 340);
        f.setLocationRelativeTo(null);
        f.setResizable(false);
        f.setVisible(true);
        f.go();
    }

}

