2013-08-16 2 views
1

enter image description hereenter image description here 이미지를 회전하려고하는데 다소 효과가 있지만 문제가 제대로 작동하지 않습니다. 원하는대로 정확하게 회전하지 않습니다. 이미지가 일부 믹스 형식으로 표시됩니다. 버튼 클릭에이미지가 회전하지 않습니다.

내 코드 :

RT90.addActionListener(new ActionListener() 
     {   
      @Override 
      public void actionPerformed(ActionEvent arg0) 
      { 
       degrees+=90; 
       rotateIMG(degrees); 
       repaint(); 
      } 
     }); 

rotateIMG() 코드 :이 코드에 wrong을 무엇

public void rotateIMG(double d) 
    { 
     BufferedImage b ; 
     b=a; 
     Graphics g; 
     g=b.createGraphics(); 
     Graphics2D g2d = (Graphics2D)g; 

     System.out.println(b.getWidth()); 
     System.out.println(b.getHeight()); 

     g2d.rotate(Math.toRadians(d), b.getWidth()/2, b.getHeight()/2); 
     g2d.drawImage(b,0,0,null); 

     ImageIcon rtimg = new ImageIcon(b); 
     label.setIcon(rtimg); 

    } 

어떤 생각? 여기서 a은 이미지 스택에서로드 된 버퍼 이미지이고 labelJLabel이며 이미지를 표시하는 데 사용됩니다.

+0

패널과 프레임에 a와 b를 동시에 표시 할 수 있습니까? – Gerret

+0

"이미지가 일부 믹스 형식으로 표시됩니다."라는 메시지는 나에게 분명하지 않습니다. 아마도 스크린 샷을 제공 할 수 있습니까? 물론 SSCCE도 그렇게 할 것입니다. – haraldK

+0

이미지를 그 위에 그릴 때 때때로 문제가 있습니다. 새로운'BufferedImage'를 생성하고 그 위에 페인트를하십시오. – kiheru

답변

2

원본으로 사용하는 이미지를 덮어 쓰는 중입니다 (b == a). 대신 새로운 것을 만들어야합니다.

public void rotateIMG(double d) { 
    // Consider also using GraphicsConfiguration.createCompatibleImage(). 
    // I'm just putting here something that should work 
    BufferedImage b = new BufferedImage(a.getHeight(), a.getWidth(), BufferedImage.TYPE_INT_ARGB); 
    Graphics2D g2d = b.createGraphics(); 

    g2d.rotate(Math.toRadians(d), a.getWidth()/2, a.getHeight()/2); 
    // Note the a instead of b here 
    g2d.drawImage(a, 0, 0, null); 
    // Do you want to keep the old a or not? 
    // a = b; 
    ImageIcon rtimg = new ImageIcon(b); 
    label.setIcon(rtimg); 
} 
+0

선생님, 그 코드는 작동하지만 문제는 이미지의 일부분이 자르다는 것이 회전 후 표시되지 않는다는 것을 의미합니다. –

+1

@ user2659972 방금 코드를 작성했지만 시도하지 않았습니다 .-P. 문제는 이미지 크기가 변경 되었기 때문에 GUI가 레이아웃에이를 반영해야하기 때문일 수 있습니다. 레이아웃이 어떻게 작동하는지 모르겠으니 확신 할 수 없습니다. – kiheru

+1

또 다른 가능한 소스는'rotate()'호출에서 사용 된 번역입니다. 나는 그것이 맞는지는 확인하지 않았지만 당신에게서 그것을 복사했다. – kiheru

2

문제는 화상의 일부가 Rotated Icon

체크 아웃 자른 점이다. 아이콘이 다양한 각도로 회전 할 때 아이콘의 정확한 크기를 계산합니다.

관련 문제