![]() | ImageRotation | サンプルソース |
|---|---|---|
おめでとうございま〜す。画像を回転させま〜す。いつもより多く回しておりま〜す。rotateメソッドで座標軸が回転しま〜す。 |
ImageRotation.java |
/**
* 愛のJava256本ノック for Java 5.0
* Javaサンプルソース ver0.2C "ImageRotation"
* ImageRotation.java 「画像を回転させる」
*
* 2005/09/23 制作:安永ノリカズ
*
* 【コンパイル&実行方法】
* >javac ImageRotation.java
* >java ImageRotation
* 【キーワード】
* Java2D, java.awt.geomパッケージ, AffineTransformクラス, ラジアン(radian)
* 【試してみよう】
* 回転速度を上げ、「いつもより多く」回す。
* 画像の中心と回転の中心をずらし、「いつもより大きく」回す。
* 文字や図形など、「いつもと違う物」も回す。
*/
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.String;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
import static java.lang.Math.PI;
public class ImageRotation extends JFrame {
final static int C00 = 30;
public ImageRotation() {
DrawPanel L00 = new DrawPanel();
add(L00);
new Timer(C00, L00).start();
}
public static void main(String[] A00) {
Toolkit.getDefaultToolkit().setDynamicLayout(true);
JFrame L00 = new ImageRotation();
L00.setTitle("おめでとうございま〜す!");
L00.setDefaultCloseOperation(EXIT_ON_CLOSE);
L00.setBackground(Color.white);
L00.setSize(320, 240);
L00.setVisible(true);
}
}
class DrawPanel extends JPanel implements ActionListener {
static final String C00 = "image/rotation.gif";
Image I00;
int I01;
int I02;
int I03 = 0;
public DrawPanel() {
setBackground(Color.white);
I00 = new ImageIcon(C00).getImage();
I01 = I00.getWidth(this);
I02 = I00.getHeight(this);
}
public void actionPerformed(ActionEvent A00) {
I03 = ++I03 % 360;
repaint();
}
public void paintComponent(Graphics A00) {
Graphics2D L00 = (Graphics2D)A00;
L00.setColor(Color.white);
L00.fillRect(0, 0, getWidth(), getHeight());
L00.rotate(I03 * PI / 180, getWidth() / 2.0, getHeight() / 2.0);
L00.drawImage(I00, (getWidth() - I01) / 2, (getHeight() - I02) / 2, this);
}
}
/* ■ クラスの外でちょっと一言 ■
画像の回転というと、元となる画像を回転させて、それから表示するという手順
を思い浮かべがちですが、ここでは、座標軸の方を回転させて、毎回同じ位置に
画像を貼り付けるという手法をとってます。
回転の中心角をパネルの中心に設定し、さらに、パネルの中心に画像を表示して
ますので、結果的に画像の中心で回転するというわけですね。
このrotateメソッドはGraphics2Dクラスのものですが、J2SE1.2以降、paintに渡
されるGraphicsオブジェクトは、Graphics2Dのサブクラスですので、そのまま
キャストすることによってGraphics2Dとして利用することが出来ます。
*/