У меня есть некоторые проблемы с вращающимися изображениями в 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), но все примеры, которые я видел, в основном используют тот же подход, что и я..., который не работает для меня.
Спасибо за советы.