【发布时间】:2014-09-20 17:26:02
【问题描述】:
我目前正在研究用 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 轴上移动了多少并将其移回其原始位置,但这对于像旋转某物这样“基本”的东西来说似乎非常复杂。
【问题讨论】:
标签: java image affinetransform