Java - поворот изображения

Я пытаюсь повернуть изображение. Я использую этот код 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"));

Но я вижу странный результат:

Источник:

**Sourse image:**

Результат:

**Result image:**

Можете ли вы помочь мне с этой проблемой?

Ответ 1

Недостаточно переключать ширину и высоту изображения. Вы вращаетесь с использованием центра изображения в качестве источника вращения. Просто попробуйте то же самое с листом бумаги, и вы увидите, что он работает одинаково. Вы также должны немного переместить бумагу, что означает применить преобразование, чтобы исправить это. Итак, сразу же после вызова поворота сделайте следующее:

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

Ответ 2

Новое изображение имеет разные размеры из-за поворота. попробуй это: BufferedImage newImage = новый BufferedImage (oldImage.getWidth(), oldImage.getHeight(), oldImage.getType());

Ответ 3

Попробуйте получить границы вашей панели, на которой вы делаете свой рисунок

Rectangle rect = this.getBounds();

И затем выполните:

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

Надеюсь, что это поможет Ура!

Ответ 4

Вы можете написать так, что это будет работа.

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

Я думаю, что место для width и height неверно в вашем коде.