关于 java:Rotating Image (让它回到原来的位置)

Rotating Image (getting it back to original position)

使用"仿射变换",我可以轻松地旋转 imageA。同样,imageA 将与 imageB 一起移动。但是,在旋转 imageA 后,我似乎找不到将其移回其原始位置的方法。

(我在一些网站上进行了一些研究,显然最好的方法是将图像移回其原始位置,使其看起来像从锚点旋转。)

这是我目前的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
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 上),那将非常有帮助!


I looked that over, but the code rotates the entire panel; I just want to rotate one Image on a fixed rotate point.

有两件事可以帮助你理解:

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

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