import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import java.awt.image.*; import java.io.*; import javax.swing.*; import javax.imageio.*; public class Test { public static void main (String[] args) { AffineTransformOp1 win = new AffineTransformOp1("反転と回転"); } } class AffineTransformOp1 extends JFrame { /******************/ /* コンストラクタ */ /******************/ AffineTransformOp1(String name) { // JFrameクラスのコンストラクタ(Windowのタイトルを引き渡す) super(name); // Windowの大きさ setSize(1040, 370); // 画像の読み込み Image im = getToolkit().getImage("hana.gif"); MediaTracker trk = new MediaTracker(this); trk.addImage(im, 0); try { trk.waitForID(0); } catch (InterruptedException e) {} // AffineTransformOp_e_MainPanel オブジェクト AffineTransformOp_e_MainPanel pn = new AffineTransformOp_e_MainPanel(im); // AffineTransformOp_e_MainPanel オブジェクトの生成 getContentPane().add(pn); // AffineTransformOp_e_MainPanel オブジェクトを ContentPane に追加 // ウィンドウを表示 setVisible(true); // イベントアダプタ addWindowListener(new WinEnd()); } /******************************/ /* 上,左,下,右の余白の設定 */ /******************************/ public Insets getInsets() { return new Insets(50, 20, 20, 20); } /************/ /* 終了処理 */ /************/ class WinEnd extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } } } class AffineTransformOp_e_MainPanel extends JPanel { Image im1; BufferedImage im0, im2, im3; AffineTransformOp_e_MainPanel(Image im) { im1 = im; setBackground(Color.white); // 背景色の設定 // BufferedImageに変換 int w = im1.getWidth(null); int h = im1.getHeight(null); im0 = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); Graphics g = im0.getGraphics(); g.drawImage(im1, 0, 0, null); g.dispose(); // 左右反転 AffineTransform at1 = AffineTransform.getScaleInstance(-1.0, 1.0); at1.translate(-w, 0); AffineTransformOp op1 = new AffineTransformOp(at1, null); im2 = op1.filter(im0, null); // 45度回転 AffineTransform at2 = new AffineTransform(); at2.rotate(45 * Math.PI / 180, 0, 0); AffineTransformOp op2 = new AffineTransformOp(at2, null); im3 = op2.filter(im0, null); } // 描画 public void paintComponent(Graphics g) { super.paintComponent(g); // 親クラスの描画 // 基の画像 g.drawImage(im1, 50, 50, this); // 左右反転 g.drawImage((Image)im2, 300, 50, this); // 45度回転 g.drawImage((Image)im3, 550, 50, this); Graphics2D g2 = (Graphics2D)g; AffineTransform affin = new AffineTransform(); affin.translate(850, 50); //イメージの移動 affin.rotate(45 * Math.PI / 180, 0, 0); //イメージを画像の左上を中心に回転 g2.drawImage(im1, affin, null); //イメージの描画 } }