我目前正在研究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轴上的移动量并将其移回原始位置,但对于像旋转某些东西那样的“基本”,这似乎非常复杂。