Java 旋转图像切点

Java 旋转图像切点,java,image,affinetransform,Java,Image,Affinetransform,我目前正在研究Java中的旋转图像,因为我将创建一些物理模拟,其中我需要旋转一些精灵。我已经成功地旋转了图片,但每当我没有精确地旋转90度、180度或270度时,我的图像的左上角就会被切掉。我在某个地方读到了一些关于旋转中心不一定是(宽度/2,高度/2)的信息,所以我尝试了一些其他参数,几乎得到了所有的角,但是图像与面板的相对位置已从中心变为其他位置。有人知道这是怎么回事吗?我该如何解决 这里有三张图片显示了我所说的内容: 我使用的代码如下所示: @Override public

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

    我非常确定图形对象比图像小

    当您在绘制的面板上创建该面板时,请将其放大两倍(好的,1.5倍就足够了),并确保围绕图形中心旋转图像。。。然后你的图像将被正确地绘制

    不幸的是,你没有提供足够的代码来验证我的理论。。。也许你可以在创建容器的地方添加那个部分,或者更好的是,你测试我的理论并确认它,或者证明它是错误的

    抱歉,这次没有附加代码