У меня проблемы с поворотом изображений в 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;
}
Вращение - это простое перечисление со значениями NONE, CLOCKWISE и COUNTERCLOCKWISE.
Здесь отображаются симптомы моих проблем:
http://perp.se/so/rotate_problems.html
Итак, вращение работает нормально, но полученные изображения не привязаны к правильным координатам (или как это следует выразить). И поскольку я вообще-то не знаю, что, черт возьми, делаю (моя линейная алгебра слабая), я не знаю, как решить эту проблему самостоятельно.
Я пробовал случайным образом возиться с экземпляром AffineTransform, но это мне не помогло (конечно). Я пробовал гуглить (и искать SO), но все примеры, которые я видел, в основном используют тот же подход, что и я ... который для меня не работает.
Благодарен за совет.