旋转图像削减角落

时间:2014-09-20 17:26:02

标签: java image affinetransform

我目前正在研究用Java旋转图像,因为我要创建一些物理模拟,我需要旋转一些精灵。我设法旋转图片,但每当我不准确地旋转90度,180度或270度时,我的图像的左上角就会被切掉。我读到某个关于旋转中心的东西不一定是(宽度/ 2,高度/ 2),所以我只是尝试了一些其他参数并几乎得到了所有角落,但是图像与面板的相对位置已经从以其他方式为中心。有谁知道这样做了什么,以及我如何解决它?

以下三张图片展示了我所谈论的内容:

  1. Not rotated
  2. Rotated around (width/2, height/2)
  3. Rotated around (width/2, height)
  4. 我使用的代码如下:

    @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 个答案:

答案 0 :(得分:0)

我很确定你的图形对象比你的图像小......

当您在绘制时创建该面板时,将其设置为两倍大(好,1.5倍大也足够)并确保围绕图形中心旋转图像...然后您的图像将是画得好!

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

抱歉,这次没有附加代码......