我目前正在研究Java中的旋轉圖像,因爲我要創建一些物理模擬,我需要旋轉一些精靈。我已經設法旋轉圖片,但每當我不旋轉90,180或270度時,圖像的左上角都會被切掉。我讀了一些關於旋轉中心的地方(寬度/ 2,高度/ 2),所以我嘗試了其他一些參數,幾乎找到了所有的角落,但圖像與面板的相對位置已經從中心變成了其他的東西。有誰知道這是什麼,以及我如何解決它?旋轉圖像削減角落
這裏有三個圖像,顯示了什麼我談論:
我使用的代碼如下:
@Override
public void paintComponent(Graphics graphics)
{
Graphics2D g2d = (Graphics2D) graphics;
super.paintComponent(g2d);
double rotate = Math.toRadians(45);
double X = image.getWidth()/2;
double Y = image.getHeight()/2;
AffineTransform tx = AffineTransform.getRotateInstance(rotate, X, Y);
AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);
g2d.drawImage(op.filter(image, null), 200, 200, null);
}
值得一提的是,無論角度如何,它總是左上角被切掉。所以我做了一些更多的測試,如果我圍繞一個點(image.getWidth()/ 2,image.getHeight()/ + 20)旋轉正方形,整個圖片是在旋轉後顯示,但顯然不再與旋轉之前的位置相同。這告訴我的是,無論處理後圖像被寫入的「畫布」是什麼,在圖像本身的X/Y軸上都會更大。我可能會編寫一個算法來計算圖片在X/Y軸上的移動量並將其移回原始位置,但對於像旋轉某些東西那樣的「基本」,這似乎非常複雜。