2012-05-11 13 views
2

"アフィン変換"を使用すると、簡単にimageAを回転させることができます。同様にimageAimageBと一緒に移動します。しかし、私はそれを回転させた後にimageAを元の位置に戻す方法を見つけることができないようです。これまでの私のコードHERESに回転イメージ(元の位置に戻す)

(私はいくつかのサイトでいくつかの研究を行っていると明らかに最善の方法は、そのアンカーポイントから回転のように見えるように元の位置に画像を移動することです。)

:誰も私は(右imageBにある)元の位置に戻ってimageAを移動することができた場合は非常に便利でしょう

public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    AffineTransform af = new AffineTransform(); 
    Graphics2D g2d = (Graphics2D) g; 


    af.translate(imageBx, imageBy); // moves ImageA to imageb's position 
    af.rotate(Math.toRadians(angle), imageB.getHeight(this)/2, imageB.getWidth(this)/2); 


    g2d.drawImage(imageA, af, null); 
    g2d.drawImage(imageB, imageBx, imageBy, null); 
    } 

+2

この[example](http://stackoverflow.com/a/3420651/230513)が役立つかどうかを確認してください。 – trashgod

+0

私はそれを見ましたが、コードがパネル全体を回転させるので、固定された回転ポイント上の1つの画像(別のものに接続され、タンクとそのアームに似ています)を回転させたいだけです。 – Kenny

答えて

2

私はそれを見ましたが、codeはパネル全体を回転します。固定回転ポイントにImageの1つを回転させたいだけです。

2つのことはご理解を導く助けるかもしれない:

  • example引用用途rotate(double theta)。それはが先にであり、が成功しましたパネルの中央が翻訳されました。オペレーションは、明らかにの順序で実行されることに注意してください。あなたの例(意味するかもしれない)はrotate(double theta, double anchorx, double anchory)を呼び出します。 2つは同じ結果をもたらし、後者は前者の便利な代替手段です。

  • このexampleは、グラフィックスコンテキスト(g2d)またはイメージ自体をどのように変換できるかを対照しています。あなたの例ではdrawImage(Image img, AffineTransform xform, ImageObserver obs)が呼び出され、xformを既存のグラフィックス変換に連結します。後続のすべての図面に影響します。それらを別々に保つ方が簡単かもしれません。

+0

ありがとう、私の問題は解決しました – Kenny

関連する問題