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),那将非常有帮助!

4

1 回答 1

2

我看了一遍,但代码旋转了整个面板;我只想Image在一个固定的旋转点上旋转一个。

有两件事可能有助于指导您的理解:

  • 引用的示例rotate(double theta)使用; 它之前是对原点翻译,然后是面板中心的翻译。请注意,这些操作的执行顺序与声明的顺序明显相反。您的示例(可能打算)调用rotate(double theta, double anchorx, double anchory). 两者产生相同的结果,后者是前者的方便替代品。

  • 示例对比了如何转换图形上下文 (g2d) 或图像本身。您的示例调用drawImage(Image img, AffineTransform xform, ImageObserver obs),它连接xform到现有的图形转换;这会影响所有后续绘图。将它们分开可能更容易。

于 2012-05-13T23:00:21.657 回答