Java中的旋转PNG
我正在尝试旋转一个用Java加载的png。我的问题是,当我旋转图像时,它似乎也会弄乱图像的位置。我正在旋转一个60x60的图像,所以我假设旋转它不会移动图像。有没有一种方法可以在不移动图像的情况下旋转图像,或者设置仿射变换的坐标Java中的旋转PNG,java,image,affinetransform,Java,Image,Affinetransform,我正在尝试旋转一个用Java加载的png。我的问题是,当我旋转图像时,它似乎也会弄乱图像的位置。我正在旋转一个60x60的图像,所以我假设旋转它不会移动图像。有没有一种方法可以在不移动图像的情况下旋转图像,或者设置仿射变换的坐标 AffineTransform identity = new AffineTransform(); gr.setColor(Color.red); gr.setRenderingHint(RenderingHints.K
AffineTransform identity = new AffineTransform();
gr.setColor(Color.red);
gr.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY );
AffineTransform trans = new AffineTransform();
trans.setTransform(identity);
trans.rotate( -Math.toRadians(15) );
trans.translate(-25, 220);
gr.drawImage(body.getImage(), 0, 200, null);
gr.drawImage(gun.getImage(), trans, this);
实例可以使用连接(添加在一起)。旋转图像的一般方法是
- 将图像的中心移动到原点()
- 旋转图像()
- 将其移回原始坐标()
事实上,请注意以下方法:
返回围绕定位点旋转坐标的变换。此操作相当于平移坐标,使定位点位于原点(S1),然后围绕新原点(S2)旋转坐标,最后平移,使中间原点恢复到原始定位点(S3)的坐标李>
返回一个变换,该变换将围绕锚点手风琴(sic)旋转坐标到旋转向量。所有坐标围绕指定的定位点坐标旋转相同的量。旋转量使得沿前一个正X轴的坐标随后将与从原点指向指定矢量坐标的矢量对齐。如果vecx和vecy均为0.0,则返回标识转换。此操作相当于调用:
- 将图像的中心移动到原点()
- 旋转图像()
- 将其移回原始坐标()
事实上,请注意以下方法:
返回围绕定位点旋转坐标的变换。此操作相当于平移坐标,使定位点位于原点(S1),然后围绕新原点(S2)旋转坐标,最后平移,使中间原点恢复到原始定位点(S3)的坐标李>
返回一个变换,该变换将围绕锚点手风琴(sic)旋转坐标到旋转向量。所有坐标围绕指定的定位点坐标旋转相同的量。旋转量使得沿前一个正X轴的坐标随后将与从原点指向指定矢量坐标的矢量对齐。如果vecx和vecy均为0.0,则返回标识转换。此操作相当于调用:
多亏了多纳尔·费罗斯(Donal Fellows)的鼓励,我选择了RTM。我自己在轮换时遇到了一些麻烦。旋转90度是最大的问题 有一个API可以很好地处理这个问题,这就是 代码: 如果没有使用imgscalr进行缩放和转换,那么标准java.awt就可以了 因为这是一张新的图像照片;确保使用var.flush()刷新/空值旧版本
啦啦队在轮换中遇到了一些复杂性。旋转90度是最大的问题 有一个API可以很好地处理这个问题,这就是 代码: 如果没有使用imgscalr进行缩放和转换,那么标准java.awt就可以了 因为这是一张新的图像照片;确保使用var.flush()刷新/空值旧版本
干杯您正在调用
.translate()
这是故意的吗?我这样做是为了尝试将图像移回原位,但数量会根据您旋转的程度而变化。您正在调用.translate()
这是故意的吗?我这样做是为了尝试将图像移回原位,但是数量的变化取决于旋转的程度。带有anchorx/y参数的方法确实如此。@DonalFellows添加了这一信息。我不知道答案。感谢您的澄清。带有anchorx/y参数的方法确实就是这样。@DonalFellows补充了这一信息。我不知道答案。谢谢你的澄清。
BufferedImage rotatedPhoto = Scalr.rotate(photo, Scalr.Rotation.CW_90, null);