2012-08-28 18 views
10

Estoy tratando de rotar la imagen. Estoy utilizando el código de Java:Java - Rotación de la imagen

BufferedImage oldImage = ImageIO.read(new FileInputStream("C:\\workspace\\test\\src\\10.JPG")); 
BufferedImage newImage = new BufferedImage(oldImage.getHeight(), oldImage.getWidth(), oldImage.getType()); 
Graphics2D graphics = (Graphics2D) newImage.getGraphics(); 
graphics.rotate(Math.toRadians(90), newImage.getWidth()/2, newImage.getHeight()/2); 
graphics.drawImage(oldImage, 0, 0, oldImage.getWidth(), oldImage.getHeight(), null); 
ImageIO.write(newImage, "JPG", new FileOutputStream("C:\\workspace\\test\\src\\10_.JPG")); 

Pero veo extraño resultado:

Fuente:

**Sourse image:**

Resultado:

**Result image:** http://s14.postimage.org/cjut935ip/image.jpg

¿Puede usted por favor ayuda yo con este problema?

+3

¿No debería rotar sobre el centro de oldImage, en lugar de newImage? –

+0

Intento graphics.rotate (Math.toRadians (90), oldImage.getWidth()/2, oldImage.getHeight()/2); No es ayuda. http://s13.postimage.org/7omxa1oef/image.jpg – user1631241

Respuesta

14

No es suficiente cambiar el ancho y el alto de la imagen. Está girando usando el centro de la imagen como el origen de la rotación. Solo prueba lo mismo con una hoja de papel y verás que funciona de la misma manera. También debe mover el papel un poco, lo que significa aplicar una transformación para solucionarlo. Entonces, inmediatamente después de la llamada de rotación, haga esto:

graphics.translate((newImage.getWidth() - oldImage.getWidth())/2, (newImage.getHeight() - oldImage.getHeight())/2); 
+0

¡Funciona! ¡Muy agradecido! – user1631241

+0

Lo sé :) De nada. –

+0

Me da vergüenza no pensar de inmediato en esto ... :-p – oldrinb

0

La nueva imagen tiene diferentes tamaños debido a la rotación. intente esto: BufferedImage newImage = new BufferedImage (oldImage.getWidth(), oldImage.getHeight(), oldImage.getType());

+0

Uh, sabe muy bien que hay diferentes tamaños. Tu código no resuelve nada. – oldrinb

+0

Ya lo estoy intentando. Después de esto tengo: http://s11.postimage.org/4jvhjtewz/image.jpg – user1631241

0

intentar conseguir límites de su panel en el que se hacen su dibujo

Rectangle rect = this.getBounds(); 

y luego hacer:

graphics.rotate(Math.toRadians(90), (rect.width - newImage.getWidth())/2, (rect.height - newImage.getHeight())/2); 

la esperanza de que podría ayudar a Salud!

+0

llegó tarde por un minuto ... bueno: P –

0

Puede escribir de esta manera, será un trabajo.

BufferedImage newImage = new BufferedImage(oldImage.getWidth(), oldImage.getHeight(), oldImage.getType()); 

Creo que el lugar de width y height está mal en el código.

Cuestiones relacionadas