import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.RenderingHints; import java.awt.image.BufferedImage; import java.net.URL; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.SwingUtilities; public class ImageScale1 extends JComponent { private BufferedImage image; private static final int PADDING = 20; private static final double SCALE_FACTOR = .1; private int scaleW, scaleH; public ImageScale1() { try { URL url = new URL("http://farm4.static.flickr.com/3609/3620307800_6e7d70f593_b.jpg"); image = ImageIO.read(url); scaleW = (int)(SCALE_FACTOR * image.getWidth()); scaleH = (int)(SCALE_FACTOR * image.getHeight()); setPreferredSize(new Dimension(PADDING + (3 * (scaleW + PADDING)), PADDING + (2 * (scaleH + PADDING)))); } catch (IOException e) { System.err.println("Image Loading ERROR: " + e); System.exit(0); } } public void paintComponent(Graphics g) { int x = PADDING; int y = PADDING; Graphics2D g2d = (Graphics2D)g; // NEAREST NEIGHBOR g2d.drawString("NearestNeighbor", x, y); long start = System.nanoTime(); g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR); g2d.drawImage(image, x, y, scaleW, scaleH, null); long end = System.nanoTime(); System.out.println("Nearest Neighbor: " + (end - start)/1000000.0 + "ms"); // BILINEAR x += scaleW + PADDING; g2d.drawString("Bilinear", x, y); start = System.nanoTime(); g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g2d.drawImage(image, x, y, scaleW, scaleH, null); end = System.nanoTime(); System.out.println("Bilinear: " + (end - start)/1000000.0 + "ms"); // BICUBIC x += scaleW + PADDING; g2d.drawString("Bicubic", x, y); start = System.nanoTime(); g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); g2d.drawImage(image, x, y, scaleW, scaleH, null); end = System.nanoTime(); System.out.println("Bicubic: " + (end - start)/1000000.0 + "ms"); // getScaledInstance() DEFAULT x = PADDING; y += scaleH + PADDING; g2d.drawString("Default", x, y); start = System.nanoTime(); Image scaledImg1 = image.getScaledInstance(scaleW, scaleH, Image.SCALE_DEFAULT); g.drawImage(scaledImg1, x, y, null); end = System.nanoTime(); System.out.println("Default: " + (end - start)/1000000.0 + "ms"); // getScaledInstance() SMOOTH x += scaleW + PADDING; g2d.drawString("Smooth", x, y); start = System.nanoTime(); Image scaledImg2 = image.getScaledInstance(scaleW, scaleH, Image.SCALE_SMOOTH); g.drawImage(scaledImg2, x, y, null); end = System.nanoTime(); System.out.println("Smooth: " + (end - start)/1000000.0 + "ms"); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { JFrame frame = new JFrame("Image Scaling"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new ImageScale1()); frame.validate(); frame.pack(); frame.setVisible(true); } }); } }