【问题标题】:Java - Image RotationJava - 图像旋转
【发布时间】:2012-08-23 08:34:51
【问题描述】:

我正在尝试旋转图像。我正在使用这个 Java 代码:

BufferedImage oldImage = ImageIO.read(new FileInputStream("C:\\workspace\\test\\src\\10.JPG"));
BufferedImage newImage = new BufferedImage(oldImage.getHeight(), oldImage.getWidth(), oldImage.getType());
Graphics2D graphics = (Graphics2D) newImage.getGraphics();
graphics.rotate(Math.toRadians(90), newImage.getWidth() / 2, newImage.getHeight() / 2);
graphics.drawImage(oldImage, 0, 0, oldImage.getWidth(), oldImage.getHeight(), null);
ImageIO.write(newImage, "JPG", new FileOutputStream("C:\\workspace\\test\\src\\10_.JPG"));

但我看到了奇怪的结果:

来源:

结果:

你能帮我解决这个问题吗?

【问题讨论】:

  • 不应该围绕oldImage的中心旋转,而不是newImage?
  • 我试试 graphics.rotate(Math.toRadians(90), oldImage.getWidth() / 2, oldImage.getHeight() / 2);它没有帮助。 s13.postimage.org/7omxa1oef/image.jpg

标签: java image graphics rotation bufferedimage


【解决方案1】:

由于旋转,新图像具有不同的大小。 尝试这个: BufferedImage newImage = new BufferedImage(oldImage.getWidth(),oldImage.getHeight(),oldImage.getType());

【讨论】:

  • 呃,他很清楚有不同的尺寸。您的代码无法解决任何问题。
【解决方案2】:

尝试获取您在其上进行绘图的面板的边界

Rectangle rect = this.getBounds();

然后做:

graphics.rotate(Math.toRadians(90), (rect.width - newImage.getWidth()) / 2, (rect.height - newImage.getHeight()) / 2);

希望能有所帮助 干杯!

【讨论】:

  • 迟到了一分钟......好吧:P
【解决方案3】:

切换图片的宽高是不够的。您正在使用图像的中心作为旋转原点进行旋转。只需用一张纸尝试相同的方法,您就会发现它的工作方式相同。您还必须稍微移动纸张,这意味着应用变换来解决此问题。因此,在轮换调用之后,立即执行以下操作:

  graphics.translate((newImage.getWidth() - oldImage.getWidth()) / 2, (newImage.getHeight() - oldImage.getHeight()) / 2);

【讨论】:

  • 我为没有立即想到这一点而感到羞耻... :-p
【解决方案4】:

你可以这样写,它会工作。

BufferedImage newImage = new BufferedImage(oldImage.getWidth(), oldImage.getHeight(), oldImage.getType());

我认为您的代码中widthheight 的位置有误。

【讨论】:

    猜你喜欢
    • 2022-01-09
    • 1970-01-01
    • 2013-09-05
    • 2015-09-16
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    相关资源
    最近更新 更多