我在内存中保存了一个 java.Awt 图像列表,并且需要旋转它们。我已经阅读了一些解决方案,但它们处理的是改变图像的显示方式,而不是真正旋转图像本身。我需要旋转图像本身,而不是以旋转的方式绘制。怎样才能做到这一点?
问问题
625 次
1 回答
2
以下代码将图像旋转任意角度(以度为单位)。
正值degrees
将顺时针旋转图像,负值逆时针旋转。生成的图像将调整大小,以使旋转后的图像完全适合它。
我已经用图像文件作为输入对其jpg
进行了测试。png
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 回答