2012-08-28 10 views
10

Ich versuche, Bild zu drehen. Ich bin mit diesem Java-Code:Java - Image Rotation

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

Aber ich sehe seltsames Ergebnis:

Quelle:

**Sourse image:**

Ergebnis:

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

Können Sie sich bitte helfen Ich mit diesem Problem?

+3

Sollten Sie nicht um das Zentrum von oldImage statt um newImage rotieren? –

+0

Ich versuche graphics.rotate (Math.toRadians (90), oldImage.getWidth()/2, oldImage.getHeight()/2); Es ist nicht hilfreich. http://s13.postimage.org/7omxa1oef/image.jpg – user1631241

Antwort

14

Es ist nicht genug, um die Breite und Höhe des Bildes zu ändern. Sie drehen mit der Bildmitte als Rotationsursprung. Versuchen Sie es mit einem Blatt Papier und Sie werden sehen, dass es genauso funktioniert. Sie müssen das Papier auch ein wenig bewegen, was bedeutet, dass Sie eine Transformation anwenden müssen, um dies zu beheben. Also, direkt nach dem Anruf rotieren, tun Sie dies:

+0

Es funktioniert! Vielen Dank! – user1631241

+0

Ich weiß :) Gern geschehen. –

+0

Ich schäme mich dafür, nicht sofort daran zu denken ... :-p – oldrinb

0

Das neue Bild hat verschiedene Größen wegen der Rotation. versuchen Sie dies: BufferedImage newImage = neu BufferedImage (oldImage.getWidth(), oldImage.getHeight(), oldImage.getType());

+0

Uh, er ist sehr bewusst, dass es verschiedene Größen gibt. Dein Code löst nichts. – oldrinb

+0

Bereits versucht. Danach habe ich: http://s11.postimage.org/4jvhjtewz/image.jpg – user1631241

0

Try Grenzen Ihrer Anzeige, in der Sie immer tun, um Ihre Zeichnung

Rectangle rect = this.getBounds(); 

Und dann tun:

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

Hoffnung, die Beifall helfen könnte!

+0

war für eine Minute zu spät ... nun: P –

0

Sie können so schreiben, es wird Arbeit sein.

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

denke ich, der richtige Ort für width und height im Code falsch ist.