AffineTransformクラスを使用してJavaで画像を回転させる際に問題が発生します。
画像の回転(90度)コピーを作成するには、次の方法があります。
private BufferedImage createRotatedCopy(BufferedImage img, Rotation rotation) {
int w = img.getWidth();
int h = img.getHeight();
BufferedImage rot = new BufferedImage(h, w, BufferedImage.TYPE_INT_RGB);
double theta;
switch (rotation) {
case CLOCKWISE:
theta = Math.PI / 2;
break;
case COUNTERCLOCKWISE:
theta = -Math.PI / 2;
break;
default:
throw new AssertionError();
}
AffineTransform xform = AffineTransform.getRotateInstance(theta, w / 2, h / 2);
Graphics2D g = (Graphics2D) rot.createGraphics();
g.drawImage(img, xform, null);
g.dispose();
return rot;
}
ローテーションは、値がNONE、CLOCKWISE、およびCOUNTERCLOCKWISEの単純な列挙型です。
私の問題の症状はここに表示されます:
http://perp.se/so/rotate_problems.html
したがって、回転は正常に機能しますが、結果の画像は正しい座標(またはどのように配置するか)に固定されません。そもそも自分が何をしているのかわからないので(線形代数が弱い)、自分でこれを解決する方法がわかりません。
AffineTransformインスタンスをランダムにいじってみましたが、(もちろん)役に立ちませんでした。私はグーグル(そしてSOの検索)を試しましたが、私が見たすべての例は基本的に私と同じアプローチを使用しています...それは私にとってはうまくいきません。
アドバイスありがとうございます。