AffineTransformTest.java



/*
 * BufferedImage の変形の実験
 */
import java.awt.*;
import java.awt.image.*;
import java.awt.geom.*;
import java.io.*;
import com.sun.image.codec.jpeg.*;

/** BufferedImageを表示するキャンバス */

class TransformedImageCanvas extends Canvas {

  /** BufferedImage のオブジェクト */
    public BufferedImage orig, conv;

  /** コンストラクタ */
    public TransformedImageCanvas( BufferedImage image ) {
        super();
        orig = image;
        AffineTransformOp ato = new AffineTransformOp( 
               AffineTransform.getShearInstance( 0.5, 0.5 ),
               AffineTransformOp.TYPE_NEAREST_NEIGHBOR );
        conv = ato.filter( orig, null );
        setSize( conv.getWidth(this), conv.getHeight(this) );
    }

  /** 描画メソッド */
    public void paint( Graphics g ) {
        g.drawImage( conv, 0, 0, this );
    }
}

/** JPEG画像を変形する実験 */

public class AffineTransformTest extends Frame {

  /** 画像を表示するキャンバス */
    public TransformedImageCanvas canvas;

  /** コンストラクタ */
    public AffineTransformTest( String name ) throws Exception {

        super( "Affine Transform Test" );
        try {
            FileInputStream input
                = new FileInputStream( name );
            JPEGImageDecoder decoder
                = JPEGCodec.createJPEGDecoder( input );
            BufferedImage image
                = decoder.decodeAsBufferedImage();
            canvas = new TransformedImageCanvas( image );
        }
        catch( Exception e ){
            throw e;
        }
    }

  /** 最初に呼び出されるメソッド */
    public static void main( String argv[] ) {

        try {
            AffineTransformTest frame = new AffineTransformTest( argv[0] ); 
            frame.add( frame.canvas, "Center" );
            frame.pack();
            frame.setVisible( true );
        }
        catch( Exception e ){
            System.err.println( e.toString() );
            System.exit(-1);
        }
    }
}