У меня есть некоторые проблемы с вращающимися изображениями на Java с использованием класса AffineTransform.Проблемы с вращением BufferedImage
У меня есть следующий метод для создания повернуто (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, и против часовой стрелки.
Симптомы моих проблем отображаются здесь:
http://perp.se/so/rotate_problems.html
Таким образом, вращение работает нормально, но полученные изображения не привязаны к правильным координатам (или как следует положить его). И поскольку я не знаю, что, черт возьми, я делаю в первую очередь (моя линейная алгебра слаба), я не знаю, как решить это самостоятельно.
Я попытался с некоторым случайным возиться с экземпляром AffineTransform, но мне это не помогло (конечно). Я пробовал поиск в Интернете (и поиск SO), но все примеры, которые я видел, в основном используют тот же подход, что и я, который не работает для меня.
Благодарен за совет.
Эквивалент вопрос для .NET: http://stackoverflow.com/questions/2225363/c-rotate-bitmap-90-degrees – finnw