Rotating Image (getting it back to original position)
使用"仿射变换",我可以轻松地旋转
(我在一些网站上进行了一些研究,显然最好的方法是将图像移回其原始位置,使其看起来像从锚点旋转。)
这是我目前的代码:
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); } |
如果有人可以帮助我将
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 连接到现有的图形变换;这会影响所有后续绘图。将它们分开可能更容易。