0

java.Awt 画像のリストをメモリに保持し、それらを回転させる必要があります。いくつかの解決策を読みましたが、実際には画像自体を回転させるのではなく、画像の表示方法を変更することに対処しています。回転した方法で描画するのではなく、画像自体を回転させる必要があります。これはどのように達成できますか?

4

1 に答える 1

2

次のコードは、画像を任意の角度 (度) で回転させます。

正の値degreesは画像を時計回りに回転させ、負の値は反時計回りに回転させます。結果の画像は、回転した画像が正確に収まるようにサイズが調整されます。入力として画像ファイルを使用して
テストしました。jpgpng

public static BufferedImage rotateImage(BufferedImage src, double degrees) {
double radians = Math.toRadians(degrees);

int srcWidth = src.getWidth();
int srcHeight = src.getHeight();

/*
 * Calculate new image dimensions
 */
double sin = Math.abs(Math.sin(radians));
double cos = Math.abs(Math.cos(radians));
int newWidth = (int) Math.floor(srcWidth * cos + srcHeight * sin);
int newHeight = (int) Math.floor(srcHeight * cos + srcWidth * sin);

/*
 * Create new image and rotate it
 */
BufferedImage result = new BufferedImage(newWidth, newHeight,
    src.getType());
Graphics2D g = result.createGraphics();
g.translate((newWidth - srcWidth) / 2, (newHeight - srcHeight) / 2);
g.rotate(radians, srcWidth / 2, srcHeight / 2);
g.drawRenderedImage(src, null);

return result;
}
于 2012-10-30T10:02:13.080 に答える