2014-09-20 93 views
0

我目前正在研究Java中的旋轉圖像,因爲我要創建一些物理模擬,我需要旋轉一些精靈。我已經設法旋轉圖片,但每當我不旋轉90,180或270度時,圖像的左上角都會被切掉。我讀了一些關於旋轉中心的地方(寬度/ 2,高度/ 2),所以我嘗試了其他一些參數,幾乎找到了所有的角落,但圖像與面板的相對位置已經從中心變成了其他的東西。有誰知道這是什麼,以及我如何解決它?旋轉圖像削減角落

這裏有三個圖像,顯示了什麼我談論:

  1. Not rotated
  2. Rotated around (width/2, height/2)
  3. Rotated around (width/2, height)

我使用的代碼如下:

@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軸上的移動量並將其移回原始位置,但對於像旋轉某些東西那樣的「基本」,這似乎非常複雜。

回答

0

我敢肯定,你的圖形對象是比你小的圖像...

當你創建至極該面板繪製,使其兩倍(OK,1.5倍也足夠)

並確保你圍繞圖形中心旋轉圖像......然後你的圖像將被正確繪製!

不幸你還沒有提供了足夠的代碼來驗證我的理論......也許,你創建容器您可以添加一部分,甚至更好,你考驗我的理論,並確認或證明它是錯誤的...

對不起,這次沒有附加代碼...