0

Javaにロードされたpngを回転させようとしています。私が抱えている問題は、画像を回転させると、画像の位置も台無しに見えることです。60x60 の画像を回転させているので、回転しても画像は動かないと思います。画像を移動せずに回転させる方法や、アフィン変換の座標を設定する方法はありますか?

        AffineTransform identity = new AffineTransform();
        gr.setColor(Color.red);

        gr.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY );

        AffineTransform trans = new AffineTransform();
        trans.setTransform(identity);
        trans.rotate( -Math.toRadians(15) );
        trans.translate(-25, 220);

        gr.drawImage(body.getImage(), 0, 200, null);
        gr.drawImage(gun.getImage(), trans, this);
4

2 に答える 2

4

AffineTransformインスタンスは、 を使用して連結 (一緒に追加) できますconcatenate(AffineTransform)。画像を回転する一般的な方法は次のとおりです。


実際、次のメソッドを参照してください。

  • getRotateInstance(double theta, double anchorx, double anchory)
    アンカー ポイント を中心に座標を回転させる変換を返します。この操作は、アンカー ポイントが原点になるように座標を変換し (S1)、新しい原点を中心に座標を回転させ (S2)、最後に中間の原点が元のアンカー ポイントの座標に復元されるように変換することと同じです。 (S3)。
  • getRotateInstance(double vecx, double vecy, double anchorx, double anchory)
    アンカーポイントを中心に座標を回転ベクトルに合わせて回転させる変換を返します。すべての座標は、指定されたアンカー座標を中心に同じ量だけ回転します。回転の量は、以前の正の X 軸に沿った座標が、原点から指定されたベクトル座標を指すベクトルとその後整列するようなものです。vecx と vecy の両方が 0.0 の場合、恒等変換が返されます。この操作は次の呼び出しと同じです: ...

RTM を勧めてくれた Donal Fellows に感謝します。

于 2012-01-25T13:13:00.340 に答える
1

回転で私自身がいくらかの複雑さに遭遇しました。90度回転させるのが一番大変でした。

これを適切に処理する API があり、それがimgscarです。

コード:

BufferedImage rotatedPhoto = Scalr.rotate(photo, Scalr.Rotation.CW_90, null);

スケーリングと変換に imgscar を使用しませんでした。標準の java.awt で十分です。

これにより、新しいイメージ写真が作成されます。var.flush(); で古いものを必ずフラッシュ/ヌルしてください。

乾杯

于 2012-02-02T02:03:19.860 に答える