2

Affinetransform.rotate() とを使用して、32 x 64 の png 画像を 90 度単位で回転させようとしています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() を 2 回渡しましたが、順序が間違っていたと確信しています)

これで状況が変わるかどうか教えてください。

于 2013-03-14T17:03:23.397 に答える