Поворот прямоугольника на изображении с помощью Swing - PullRequest
1 голос
/ 24 февраля 2011

Хорошо, когда пользователь рисует прямоугольник поверх изображения, я хочу заранее найти все повернутые прямоугольники для всех углов поворота изображения (90,180,270,360).

В соответствии с Java API я могу просто продолжать вызывать метод Graphics2D rotate (). Затем я могу использовать этот преобразователь Graphics2D, чтобы получить повернутый прямоугольник.

Это работает для самого первого вызова ротации (1.5708). Я получил правильную точку прямоугольника. Все другие вызовы после этого возвращают неправильную точку прямоугольника после использования Transformer.

Я думаю, что моя проблема в переводе Graphics2D (x, y). Я не понимаю, как его использовать.

Кто-нибудь знает, как исправить мой код, чтобы он возвращал правильный прямоугольник после каждого поворота?

Спасибо.

public void rotateRectangles(BufferedImage bim,int width,int height,Rectangle rect){
   BufferedImage bim = new BufferedImage(height, width,BufferedImage.TYPE_INT_RGB);
   Graphics2D g2d = (Graphics2D) (bufferedImage.createGraphics());
   g2d.translate(bufferedImage.getHeight(),0); 

   //Get Rectangle for 90 degree image rotation. This always good.
   g2d.rotate(1.5708);
   Shape shape = g2d.getTransform().createTransformedShape(rect); 
   Rectangle rotatedRect = shape.getBounds(); 
   System.out.println("rotated rectangle at 90 degrees.  Point x="+rotatedRect.x+"  y="+rotatedRect.y);


   //Get Rectangle for 180 degree image rotation. Getting wrong rotatedRect.
   g2d.rotate(1.5708);
   shape = g2d.getTransform().createTransformedShape(rect); 
   rotatedRect = shape.getBounds(); 
   System.out.println("rotated rectangle at 180 degrees. Point x="+rotatedRect.x+"  y="+rotatedRect.y); 


  //Get Rectangle for 270 degree image rotation. Getting wrong rotatedRect.
   g2d.rotate(1.5708);
   shape = g2d.getTransform().createTransformedShape(rect); 
   rotatedRect = shape.getBounds(); 
   System.out.println("rotated rectangle at 270 degrees. Point x="+rotatedRect.x+"  y="+rotatedRect.y);


  //Get Rectangle for 360 degree image rotation.Getting wrong rotatedRect.
   g2d.rotate(1.5708);
   shape = g2d.getTransform().createTransformedShape(rect); 
   rotatedRect = shape.getBounds(); 
   System.out.println("rotated rectangle at 360 degrees. Point x="+rotatedRect.x+"  y="+rotatedRect.y);         

}

Спасибо.

1 Ответ

2 голосов
/ 25 февраля 2011

Вместо поворота аффинного преобразования графического контекста с помощью g2d.rotate() рассмотрите возможность использования createTransformedShape(), как предлагается в этом примере .

Добавление: обратите внимание, в частности, что базовая линия примера Polygon изначально центрирована на источнике. В результате начальным преобразованием является вращение вокруг начала координат. В вашем случае вы можете использовать метод rotate(), который включает в себя точку привязки, которая будет центром вашего прямоугольника.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...