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:**]()
Результат:
Можете ли вы помочь мне с этой проблемой?
Ответы
Ответ 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
неверно в вашем коде.