2

我正在尝试使用Affinetransform.rotate() 和. 以 90 度增量旋转 32 x 64 png 图像AffinetransformOp.filter。它适用于 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);
4

1 回答 1

1

我认为这与您正在通过的事实有关

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

什么时候应该

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

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

让我知道这是否会改变您的情况。

于 2013-03-14T17:03:23.397 回答