【问题标题】:Rotating image cuts corners旋转图像切角
【发布时间】:2014-09-20 17:26:02
【问题描述】:

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

这里有三张图片显示我在说什么:

  1. Not rotated
  2. Rotated around (width/2, height/2)
  3. Rotated around (width/2, height)

我使用的代码如下:

@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


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-02
      • 1970-01-01
      • 2021-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多