2014-10-03 3 views
0

약간의 문제가 있습니다. 이미지를 회전 시키면 이미지가 모퉁이에서 잘립니다. 이미지 회전에 다음 코드를 사용하고 있습니다. 그것은 제대로 회전하고 있지만 모든 모서리에서 잘려나 가고 있습니다.회전 후 모서리에서 이미지가 자릅니다.

public static Image rotate(BufferedImage img, double angle) { 
    int w = img.getWidth();  
    int h = img.getHeight();  
    BufferedImage result = new BufferedImage(w, h, img.getType()); 
    Graphics2D g2 = result.createGraphics(); 
    g2.setColor(Color.WHITE); 
    g2.fillRect(0, 0, w, h); 
    g2.rotate(Math.toRadians(angle), w/2, h/2); 
    g2.drawRenderedImage(img, null); 
    //g2.drawImage(img,null,0,0); 
    return result; 
} 

나는 모서리를 자르지 못하도록하는 것이 필요합니다. 도와주세요.

+0

하지만 어떻게 될까요? 이미지의 크기가 초기 크기와 같아 지도록 (회전 된 이미지의 크기를 줄여야 함) 또는 그려진 이미지의 크기가 초기 크기로 (다소 차이가 있음) 기대합니까? (그래서'Image' 인스턴스가 초기 인스턴스보다 커야합니다)? –

+0

최종 이미지의 크기는 초기 크기와 같아야합니다. 내 요구 사항은 이미지가 회전해야하지만 모양과 느낌이 같아야한다는 것입니다. 그러나 현재 이미지는 구석에서 잘려나 가고 있습니다. – harry

+0

먼저, 모양과 느낌이이 작업과 관련이 없습니다. 둘째, 이미지가 20 x 40 인 구성 요소의 모든 공간을 차지하고 이미지를 90도 회전하면 이미지는 너비가 너무 큰 40 x 20만큼 줄어들어 절단됩니다. 이미지를 재조정하거나 충분히 큰 구성 요소에 페인트해야합니다. – user1803551

답변

0

자신이 알게 되듯이 result 이미지는 회전 된 인스턴스에 비해 너무 작습니다. 적절한 크기를 찾으려면 수학을해야합니다. 너무 게으른 (= 너무 영리한) 수학 계산을하려면 원래 이미지와 일치하는 Rectangle2D을 만들고 회전을 위해 AffineTransform을 만들고 직사각형에서 변형 된 모양을 만든 다음이 모양의 경계 상자를 사용하십시오. (Graphics에도 동일한 변환을 적용 할 수 있습니다.)

+0

나는 이것에 처음이에요. 일종의 참조 또는 코드 스 니펫으로 나를 도울 수 있습니까? 사전에 감사드립니다. – harry

+0

결과 이미지가 너무 작아서 왜 * 이해하고 있다고 가정합니다. 로테이션을 나타내는 인스턴스를 얻는 방법과 셰이프에 적용하는 방법에 대해서는 AffineTransform의 javadoc을 확인하십시오. 그런 다음 위의 단계를 따르십시오. –

관련 문제