我正在尝试旋转用Java加载的png。我遇到的问题是,当我旋转图像时,它似乎也弄乱了图像的位置。我正在旋转一个60x60的图像,所以我认为旋转它不会移动图像。有没有办法可以旋转图像而不移动它或者设置仿射变换的坐标?
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);
答案 0 :(得分:4)
AffineTransform
个实例可以使用concatenate(AffineTransform)
连接(加在一起)。旋转图像的一般方法是。
getTranslateInstance()
)。getRotateInstance()
)。getTranslateInstance()
)。实际上,请查看
的方法getRotateInstance(double theta,
double anchorx,
double anchory)
getRotateInstance(double vecx,
double vecy,
double anchorx,
double anchory)
感谢Donal Fellows提示我参加RTM。
答案 1 :(得分:1)
我自己通过轮换遇到了一些复杂性。旋转90度是最成问题的。
有一个API可以很好地处理这个问题,那就是imgscalr。
代码:
BufferedImage rotatedPhoto = Scalr.rotate(photo, Scalr.Rotation.CW_90, null);
没有使用imgscalr进行缩放和翻译,标准java.awt会在那里做得很好。
因为这会制作一张新的Image照片;一定要用var.flush();
刷新/清空旧的干杯