Java AffinetransformOp filter()搞砸了我的形象

时间:2013-03-14 17:00:22

标签: java image filter rotation affinetransform

我正在尝试使用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);
}

我还有一个截图来澄清我的问题: enter image description here

编辑:我尝试通过添加以下代码手动为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);

1 个答案:

答案 0 :(得分:1)

我认为这与您传递

的事实有关
tx.rotate(angle, img.getHeight() / 2 - 16, img.getHeight() - 16);

什么时候应该

tx.rotate(angle, img.getWidth() - 16, img.getHeight() / 2 - 16);

(你通过了两次getHeight(),我很确定它们的顺序错误了)

让我知道这是否会改变你的想法。