我想通过使用Affinetransform.rotate(
)和AffinetransformOp.filter
以90度增量旋转32乘64 png图像。它适用于0,90和180度,但在270度时只显示一半图像。经过一番研究后,我发现这是由于filter()
处理图像坐标的方式,但我不知道如何解决这个问题。我已经尝试过使用其他方法来旋转图像,但我宁愿使用这个。Java AffinetransformOp过滤器()拧我的形象
用于旋转图像的方法:
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);
我也希望为此找到解决办法。当我有100x50尺寸的图像时,旋转它,然后过滤它,结束图像是100x100。该过程扩大了图像边界以绘制所有图像,但我想知道一旦完成后是否可以重新调整这些边界。 – 2013-08-01 15:16:11