我正在尝试使用Affinetransform.rotate(
)和AffinetransformOp.filter
以90度为增量旋转32 x 64 png图像。它适用于0度,90度和180度,但在270度时只显示我图像的一半。经过一些研究后我发现这是由于filter()
处理图像坐标的方式,但我不知道如何解决这个问题。我已经尝试过使用其他方法来旋转图像,但我宁愿使用这个。
旋转图像的方法:
public BufferedImage rotateImage(BufferedImage img, double angle) {
AffineTransform tx = new AffineTransform();
tx.rotate(angle, img.getWidth() - 16, img.getHeight() - 16);
AffineTransformOp op = new AffineTransformOp(tx,
AffineTransformOp.TYPE_BILINEAR);
return op.filter(img, null);
}
我还有一个截图来澄清我的问题:
编辑:我尝试通过添加以下代码手动为filter()
创建目标图片,但无济于事。
int w, h;
if (angle == Math.PI / 2 || angle == 3 * Math.PI / 2) {
w = img.getHeight();
h = img.getWidth();
} else {
w = img.getWidth();
h = img.getHeight();
}
BufferedImage dest = new BufferedImage(w, h, img.getType());
return op.filter(img, dest);
答案 0 :(得分:1)
我认为这与您传递
的事实有关tx.rotate(angle, img.getHeight() / 2 - 16, img.getHeight() - 16);
什么时候应该
tx.rotate(angle, img.getWidth() - 16, img.getHeight() / 2 - 16);
(你通过了两次getHeight(),我很确定它们的顺序错误了)
让我知道这是否会改变你的想法。