使用Affinetransform旋转后的图像的SetPosition

时间:2016-10-30 15:22:13

标签: java image affinetransform

我想用Affinetransform

来图像

我是这样做的:

AffineTransform at = AffineTransform.getTranslateInstance(image.getWidth(null), image.getHeight(null));
at.rotate(Math.toRadians(getRadian()),image.getWidth(null)/2, image.getHeight(null)/2);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(image, at, null);

但是现在我想设置图像的位置,我该怎么做?

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

首先,您不清楚要将哪个图像位置转换为必要的位置。让我提出一般规则。假设您希望能够围绕其内部坐标(ix,iy)旋转图像,然后将此内部位置放置到具有坐标(gx,gy)的新全局位置。并且旋转角度是" angleInRadians"。然后你的转变将是:

    AffineTransform at = AffineTransform.getTranslateInstance(gx, gy);
    at.rotate(angleInRadians);
    at.translate(-ix, -iy);

你看到这里的事件顺序了吗?这是因为变换矩阵如何相互应用并定位矢量。如果你从头到尾阅读这个,那么我们做的是移动内部位置以协调开始,然后我们围绕这个开始旋转,然后我们将这个开始移动到必要的全局位置。

如果您需要移动图像中心,那么:

    double ix = imageWidth / 2;
    double iy = imageHeight / 2;

如果你想移动左上角,那么ix = 0和iy = 0,所以在这种情况下你可以跳过at.translate(-ix,-iy)。