2014-10-03 105 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'爲尺寸爲初始一個相同的(使旋轉的圖像已被縮小),或者你希望繪製的圖像具有(更多或更少)的初始大小爲最初的一(這樣'Image'實例必須比最初的那個大)? – 2014-10-03 08:05:30

+0

最終圖像的尺寸應與初始尺寸相同。我的要求是圖像應該旋轉,但外觀應該是相同的。但目前這個形象正在被削減。 – harry 2014-10-03 08:10:57

+0

首先,外觀與此無關。其次,如果圖像佔用20乘40的組件上的所有空間,並且將圖像旋轉90度,則圖像將會增加40乘20,這在寬度上太大,並且將被切割。您必須重新調整圖像大小或確保將其繪製在足夠大的組件上。 – user1803551 2014-10-03 12:37:49

回答

0

當你發現自己,result圖像是旋轉的情況下太小。你必須做一些數學來找到合適的大小。如果你懶得(=太聰明),給自己做數學題,創建一個Rectangle2D匹配您的原始圖像,爲您創造一個旋轉AffineTransform,創建您的矩形變換形狀,並用這種形狀的邊框。 (您可以將相同的變換,你Graphics爲好。)

+0

我對此很陌生。你能幫我一些參考或代碼片段。在此先感謝 – harry 2014-10-03 08:36:36

+0

我假設你明白*爲什麼*你的結果圖像太小。請檢查AffineTransform的javadoc,瞭解如何獲取表示旋轉的實例以及如何將其應用於形狀。然後按照上面的步驟。 – 2014-10-03 08:43:54