【发布时间】:2010-02-13 10:07:47
【问题描述】:
我在使用 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;
}
Rotation 是一个简单的枚举,其值为 NONE、CLOCKWISE 和 COUNTERCLOCKWISE。
这里显示了我的问题的症状:
http://perp.se/so/rotate_problems.html
所以,旋转工作正常,但生成的图像没有锚定到正确的坐标(或者应该如何放置)。而且由于我一开始并不真正知道自己在做什么(我的线性代数很弱),所以我不知道如何自己解决这个问题。
我尝试过随机摆弄 AffineTransform 实例,但它并没有帮助我(当然)。我试过谷歌搜索(和搜索 SO),但我看到的所有示例基本上都使用与我相同的方法......这对我不起作用。
感谢您的建议。
【问题讨论】:
标签: java image rotation affinetransform