2012-08-28 263 views
10

我想旋轉圖像。我使用這個Java代碼:Java - 圖像旋轉

BufferedImage oldImage = ImageIO.read(new FileInputStream("C:\\workspace\\test\\src\\10.JPG")); 
BufferedImage newImage = new BufferedImage(oldImage.getHeight(), oldImage.getWidth(), oldImage.getType()); 
Graphics2D graphics = (Graphics2D) newImage.getGraphics(); 
graphics.rotate(Math.toRadians(90), newImage.getWidth()/2, newImage.getHeight()/2); 
graphics.drawImage(oldImage, 0, 0, oldImage.getWidth(), oldImage.getHeight(), null); 
ImageIO.write(newImage, "JPG", new FileOutputStream("C:\\workspace\\test\\src\\10_.JPG")); 

但我看到奇怪的結果:

來源:

**Sourse image:**

結果:

**Result image:** http://s14.postimage.org/cjut935ip/image.jpg

能否請你幫我有這個問題嗎?

+3

難道你不應該旋轉關於oldImage的中心,而不是newImage? –

+0

我嘗試 graphics.rotate(Math.toRadians(90),oldImage.getWidth()/ 2,oldImage.getHeight()/ 2); 它沒有幫助。 http://s13.postimage.org/7omxa1oef/image.jpg – user1631241

回答

14

僅切換圖像的寬度和高度是不夠的。您正在旋轉使用圖像的中心作爲旋轉的起點。只要試着用一張紙做同樣的事情,你會發現它的工作原理是一樣的。您還必須稍微移動紙張,這意味着應用轉換來解決此問題。所以,在旋轉呼叫後立即執行此操作:

graphics.translate((newImage.getWidth() - oldImage.getWidth())/2, (newImage.getHeight() - oldImage.getHeight())/2); 
+0

它的工作原理!非常感謝! – user1631241

+0

我知道:)不客氣。 –

+0

我不覺得慚愧,因爲沒有立即想到這個...... :-p – oldrinb

0

由於旋轉,新圖像具有不同的尺寸。 試試這個: BufferedImage newImage = new BufferedImage(oldImage.getWidth(),oldImage.getHeight(),oldImage.getType());

+0

呃,他很清楚有不同的尺寸。你的代碼不能解決任何問題。 – oldrinb

+0

已經在嘗試。在此之後,我有:http://s11.postimage.org/4jvhjtewz/image.jpg – user1631241

0

嘗試讓你的面板的邊界上你做你的繪圖

Rectangle rect = this.getBounds(); 

然後執行:

graphics.rotate(Math.toRadians(90), (rect.width - newImage.getWidth())/2, (rect.height - newImage.getHeight())/2); 

希望能夠幫助 乾杯!

+0

遲到了一分鐘...好:P –

0

您可以這樣寫就可以了。

BufferedImage newImage = new BufferedImage(oldImage.getWidth(), oldImage.getHeight(), oldImage.getType()); 

我覺得widthheight的地方是錯在你的代碼。