2013-04-10 4 views
10

Мне удалось повернуть изображение 180 degrees, но хотите его повернуть 90 degreesclockwise может кто-то изменить мой код, чтобы он сделал это с объяснениями. Благодарю.Вращающееся изображение 90 градусов в 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

Попытайтесь подумать, что происходит с каждой четвертой изображения при его повороте. Я думаю, что это должен быть один хороший подход. Решите каждую четверть отдельно. –

+3

[пример] (http://forum.codecall.net/topic/69182-java-image-rotation/) –

+0

Спасибо за пример Vignesh Vino. Мне удалось получить высокую оценку. –

ответ

14

Используйте этот метод.

/** 
* 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); 
} 

снято с моего ImageTool класс.

Надеюсь, это поможет.

+0

Почему вы скопировали изображение, не выполнив его, применив 90-градусное повернутое аффинное преобразование во время рисования? просьба уточнить. – Mihir

+0

@Mihir Это требование для моей игры. Этот класс из моего игрового движка, поэтому я использовал это. Вы можете использовать все, что захотите. –

+0

разъяснения – Mihir

Смежные вопросы