2013-03-14 38 views
1

我想通過使用Affinetransform.rotate()和AffinetransformOp.filter以90度增量旋轉32乘64 png圖像。它適用於0,90和180度,但在270度時只顯示一半圖像。經過一番研究後,我發現這是由於filter()處理圖像座標的方式,但我不知道如何解決這個問題。我已經嘗試過使用其他方法來旋轉圖像,但我寧願使用這個。Java AffinetransformOp過濾器()擰我的形象

用於旋轉圖像的方法:

public BufferedImage rotateImage(BufferedImage img, double angle) { 
    AffineTransform tx = new AffineTransform(); 
    tx.rotate(angle, img.getWidth() - 16, img.getHeight() - 16); 
    AffineTransformOp op = new AffineTransformOp(tx, 
      AffineTransformOp.TYPE_BILINEAR); 
    return op.filter(img, null); 
} 

我也有一個屏幕截圖澄清我的問題: enter image description here

編輯:我已經手動試圖通過將創建filter()目標圖像的下面的代碼,無濟於事。

int w, h; 
if (angle == Math.PI/2 || angle == 3 * Math.PI/2) { 
     w = img.getHeight(); 
     h = img.getWidth(); 
} else { 
     w = img.getWidth(); 
     h = img.getHeight(); 
} 
BufferedImage dest = new BufferedImage(w, h, img.getType()); 
return op.filter(img, dest); 
+0

我也希望爲此找到解決辦法。當我有100x50尺寸的圖像時,旋轉它,然後過濾它,結束圖像是100x100。該過程擴大了圖像邊界以繪製所有圖像,但我想知道一旦完成後是否可以重新調整這些邊界。 – 2013-08-01 15:16:11

回答

1

我覺得它有什麼用,你是通過

tx.rotate(angle, img.getHeight()/2 - 16, img.getHeight() - 16); 

事實做時,它應該是

tx.rotate(angle, img.getWidth() - 16, img.getHeight()/2 - 16); 

(你傳遞的getHeight()兩次,我很確定他們是在錯誤的順序)

讓我知道這是否改變了你的事情。

+0

我確實使用了錯誤的參數,所以我解決了這個問題。但它並沒有解決我的問題。 – Exevan 2013-03-14 17:08:12