2012-05-11 297 views
2

使用「仿射變換」我可以輕鬆旋轉imageA。同樣,imageA將與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); 
    } 

如果有人可以幫我搬imageA回原來的位置(這是正確的imageB)那會非常有幫助!

+2

看看這個[示例](http://stackoverflow.com/a/3420651/230513)有幫助。 – trashgod

+0

我看了一遍,但代碼旋轉了整個面板,我只想旋轉1個圖像(連接到另一個;類似於坦克和它的手臂)在一個固定的旋轉點上。 – Kenny

回答

2

我看了一遍,但code旋轉整個面板;我只想在固定的旋轉點上旋轉一個Image

有兩件事情可以幫助指導您的理解:

  • example引用使用rotate(double theta);它是先於由翻譯到原點和成功由翻譯小組的中心。請注意,操作在明顯已執行的訂單中執行。你的例子(可能意思是)調用rotate(double theta, double anchorx, double anchory)。這兩個效果相同,後者是前者的一種方便的替代方案。

  • 這與example對比如何可以轉換圖形上下文(g2d)或圖像本身。你的例子調用drawImage(Image img, AffineTransform xform, ImageObserver obs),它將xform連接到現有的圖形變換;這會影響所有後續繪圖。將它們分開可能更容易。

+0

謝謝,我的問題解決了 – Kenny