【发布时间】:2012-05-03 07:23:09
【问题描述】:
我有一张图片,我必须将它旋转 45、90、135、180 度。我在做什么:
try {
BufferedImage src = ImageIO.read(new File("src.png"));
double ang = Math.toRadians(90);
AffineTransform t = new AffineTransform();
t.setToRotation(ang, src.getWidth() / 2, src.getHeight() / 2);
AffineTransformOp op = new AffineTransformOp(t, null);
BufferedImage dst = new BufferedImage(src.getWidth(), src.getHeight(), src.getType());
op.filter(src, dst);
ImageIO.write(dst, "png", new File("output.png"));
} catch(Exception ex) { ex.printStackTrace();
}
问题是图像改变了它的位置并超出了目标图像的范围:
我用谷歌搜索了这个并在这个问题中找到了解决方案:AffineTransform truncates image, what do I wrong? 但我完全不理解它,它只适用于象限。我尝试将目的地的宽度和高度乘以两倍,但失败了:
如何解决这个问题?目标图像不应有任何额外的(对角旋转所需的除外)空白或截断区域。角度问题(0 == 180 还是顺时针)并不重要。
感谢您的帮助。
【问题讨论】:
-
我有一个例子和图片来说明这个问题。代码已准备好运行。
标签: java image-processing rotation image-rotation affinetransform