2013-04-10 15 views
10

Ich habe es geschafft, ein Bild zu drehen, aber es zu drehen 90 degreesclockwise kann jemand meinen Code bearbeiten, so dass es dies mit Erklärung tut. Vielen Dank.Drehen eines Bildes 90 Grad in Java

private void rotateClockwise() 
    { 
     if(currentImage != null){ 
      int width = currentImage.getWidth(); 
      int height = currentImage.getHeight(); 
      OFImage newImage = new OFImage(width, height); 
      for(int y = 0; y < height; y++) { 
       for(int x = 0; x < width; x++) { 
        newImage.setPixel(x, height-y-1, currentImage.getPixel(x, y)); 
       } 
     } 
      currentImage = newImage; 
      imagePanel.setImage(currentImage); 
      frame.pack(); 
    } 
    } 
+1

Versuchen Sie zu denken, was mit jedem Viertel des Bildes passiert, wenn Sie es drehen. Ich denke, das sollte ein guter Ansatz sein. Löse jedes Quartal einzeln. –

+3

[Beispiel] (http://forum.codecall.net/topic/69182-java-image-rotation/) –

+0

Danke für das Beispiel Vignesh Vino. Ich habe es geschafft, es sehr geschätzt zu bekommen. –

Antwort

14

Verwenden Sie diese Methode.

/** 
* Rotates an image. Actually rotates a new copy of the image. 
* 
* @param img The image to be rotated 
* @param angle The angle in degrees 
* @return The rotated image 
*/ 
public static Image rotate(Image img, double angle) 
{ 
    double sin = Math.abs(Math.sin(Math.toRadians(angle))), 
      cos = Math.abs(Math.cos(Math.toRadians(angle))); 

    int w = img.getWidth(null), h = img.getHeight(null); 

    int neww = (int) Math.floor(w*cos + h*sin), 
     newh = (int) Math.floor(h*cos + w*sin); 

    BufferedImage bimg = toBufferedImage(getEmptyImage(neww, newh)); 
    Graphics2D g = bimg.createGraphics(); 

    g.translate((neww-w)/2, (newh-h)/2); 
    g.rotate(Math.toRadians(angle), w/2, h/2); 
    g.drawRenderedImage(toBufferedImage(img), null); 
    g.dispose(); 

    return toImage(bimg); 
} 

von meiner ImageTool Klasse genommen.

Ich hoffe, es hilft.

+0

Warum haben Sie das Bild kopiert, führt dies nicht durch Anwendung einer um 90 Grad gedrehten affinen Transformation beim Zeichnen? Bitte klären Sie. – Mihir

+0

@Mihir Das ist eine Voraussetzung für mein Spiel. Diese Klasse stammt von meiner Spielengine, also habe ich sie benutzt. Sie können alles verwenden, was Sie möchten. –

+0

danke für die Klärung – Mihir

Verwandte Themen