2012-05-11 299 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