Tengo algunos problemas con la rotación de imágenes en Java utilizando la clase AffineTransform.Problemas rotando BufferedImage
I tienen el siguiente método para la creación de un (90 grados) copia de una imagen girada:
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;
}
La rotación es un enum simple con el NINGUNO valores, sentido horario y antihorario.
Los síntomas de mis problemas se muestran aquí:
http://perp.se/so/rotate_problems.html
Por lo tanto, la rotación funciona bien, pero las imágenes resultantes no están ancladas a las coordenadas correctas (o cómo se debe ponerlo). Y como realmente no sé qué diablos estoy haciendo en primer lugar (mi álgebra lineal es débil), no sé cómo resolver esto por mi cuenta.
Lo he intentado con algún truco aleatorio con la instancia de AffineTransform, pero no me ha ayudado (por supuesto). Intenté buscar en Google (y buscar SO), pero todos los ejemplos que he visto utilizan básicamente el mismo enfoque que yo ... lo que no funciona para mí.
Agradecido por su asesoramiento.
pregunta equivalente para .NET: http://stackoverflow.com/questions/2225363/c-rotate-bitmap-90-degrees – finnw