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倍也足够)

并确保你围绕图形中心旋转图像......然后你的图像将被正确绘制!

不幸你还没有提供了足够的代码来验证我的理论......也许,你创建容器您可以添加一部分,甚至更好,你考验我的理论,并确认或证明它是错误的...

对不起,这次没有附加代码...