2012-08-28 19 views
10

Sto provando a ruotare l'immagine. Sto usando questo codice Java:Java - Rotazione immagine

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")); 

Ma vedo strano risultato:

Fonte:

**Sourse image:**

Risultato:

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

potete per favore aiutare io con questo problema?

+3

Non dovresti ruotare attorno al centro di oldImage, piuttosto che newImage? –

+0

Io provo graphics.rotate (Math.toRadians (90), oldImage.getWidth()/2, oldImage.getHeight()/2); Non è d'aiuto. http://s13.postimage.org/7omxa1oef/image.jpg – user1631241

risposta

14

Non è sufficiente cambiare la larghezza e l'altezza dell'immagine. Stai ruotando usando il centro dell'immagine come origine della rotazione. Prova lo stesso con un foglio di carta e vedrai che funziona allo stesso modo. È anche necessario spostare leggermente la carta, il che significa applicare una trasformazione per risolvere il problema. Quindi, immediatamente dopo la chiamata di rotazione, fare questo:

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

Funziona! Grazie mille! – user1631241

+0

Lo so :) Prego. –

+0

Mi vergogno di non pensare subito a questo ... :-p – oldrinb

0

La nuova immagine ha diverse dimensioni a causa della rotazione. prova questo: BufferedImage newImage = new BufferedImage (oldImage.getWidth(), oldImage.getHeight(), oldImage.getType());

+0

Uh, è molto consapevole che ci sono diverse dimensioni. Il tuo codice non risolve nulla. – oldrinb

+0

Già provato. Dopo questo ho: http://s11.postimage.org/4jvhjtewz/image.jpg – user1631241

0

provare a ottenere limiti del tuo pannello su cui fate il vostro disegno

Rectangle rect = this.getBounds(); 

e poi fare:

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

speranza che potrebbe aiutare Cheers!

+0

era in ritardo per un minuto ... beh: P –

0

È possibile scrivere in questo modo che sarà funzionante.

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

penso che il posto per width e height è sbagliato nel codice.