import java.awt.Dimension; import java.awt.Image; import java.awt.Point; import java.awt.Rectangle; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Iterator; import javax.imageio.IIOParamController; import javax.imageio.ImageIO; import javax.imageio.ImageReader; import javax.imageio.ImageReadParam; import javax.imageio.ImageTypeSpecifier; import javax.imageio.stream.ImageInputStream; public class ImageReaderTest4 extends ImageReaderTest1 { public ImageReaderTest4(String filename) { ImageReader reader = getReader(filename); Image shrinkImage = readShrinkImage(reader); Image subsamplingImage = readSubsamplingImage(reader); reader.dispose(); initFrame(filename + " (Shrink)", shrinkImage); initFrame(filename + " (Subsampling)", subsamplingImage); } private ImageReader getReader(String filename) { Iterator readers = ImageIO.getImageReadersBySuffix(getSuffix(filename)); if (readers.hasNext()) { ImageReader reader = (ImageReader)readers.next(); try { ImageInputStream stream = ImageIO.createImageInputStream(new File(filename)); reader.setInput(stream); return reader; } catch (IOException ex) { ex.printStackTrace(); } } return null; } private Image readSubsamplingImage(ImageReader reader) { ImageReadParam param = reader.getDefaultReadParam(); param.setSourceSubsampling(10, 10, 0, 0); Image image = null; try { long start = System.currentTimeMillis(); image = reader.read(0, param); long end = System.currentTimeMillis(); System.out.println("Subsampling Image Load Time: " + (end - start)); } catch (IOException ex) { ex.printStackTrace(); } return image; } private Image readShrinkImage(ImageReader reader) { BufferedImage shrinkImage = null; try { long start = System.currentTimeMillis(); BufferedImage image = reader.read(0); shrinkImage = new BufferedImage(image.getWidth()/10, image.getHeight()/10, image.getType()); AffineTransformOp atOp = new AffineTransformOp( AffineTransform.getScaleInstance(0.1, 0.1), null); atOp.filter(image, shrinkImage); long end = System.currentTimeMillis(); System.out.println("Shrink Image Load Time: " + (end - start)); } catch (IOException ex) { ex.printStackTrace(); } return shrinkImage; } public static void main(String[] args) { if (args.length == 1) { new ImageReaderTest4(args[0]); } else { System.out.println("Usage: java ImageReaderTest4 "); } } }