我在使用Java的AffineTransform类旋转图像时遇到了一些问题。
我有一个用于创建旋转(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),但我看到的所有示例基本上都使用与我相同的方法...但对我来说并没有用。
感谢提供建议。