Вращающиеся PNG в Java - PullRequest
       15

Вращающиеся PNG в Java

0 голосов
/ 25 января 2012

Я пытаюсь повернуть png, загруженный в Java.У меня проблема в том, что когда я поворачиваю изображение, оно также портит положение изображения.Я вращаю изображение 60x60, поэтому я предполагаю, что вращение не будет перемещать изображение.Есть ли способ, которым я могу вращать изображение, не перемещая его, или способ установить координаты аффинного преобразования?

        AffineTransform identity = new AffineTransform();
        gr.setColor(Color.red);

        gr.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY );

        AffineTransform trans = new AffineTransform();
        trans.setTransform(identity);
        trans.rotate( -Math.toRadians(15) );
        trans.translate(-25, 220);

        gr.drawImage(body.getImage(), 0, 200, null);
        gr.drawImage(gun.getImage(), trans, this);

Ответы [ 2 ]

4 голосов
/ 25 января 2012

AffineTransform экземпляры могут быть объединены (сложены вместе) с помощью concatenate(AffineTransform). Общий способ поворота изображения:. 1007 *


На самом деле, посмотрите на методы для

  • getRotateInstance(double theta, double anchorx, double anchory)
    Возвращает преобразование, которое вращает координаты вокруг точки привязки . Эта операция эквивалентна преобразованию координат таким образом, чтобы точка привязки находилась в начале координат (S1), затем их вращении вокруг нового начала координат (S2) и наконец перевод, так что промежуточное начало восстанавливается в координатах исходной точки привязки (S3).
  • getRotateInstance(double vecx, double vecy, double anchorx, double anchory)
    Возвращает преобразование, которое вращает координаты вокруг точки привязки accordinate (так в оригинале) для вектора вращения. Все координаты вращаются вокруг указанных координат привязки на одинаковую величину. Величина поворота такова, что координаты вдоль прежней положительной оси X будут впоследствии выровнены с вектором, указывающим от начала координат на указанные векторные координаты. Если и vecx, и vecy равны 0.0, возвращается преобразование идентичности. Эта операция эквивалентна вызову: ...

Спасибо Donal Fellows за приглашение в RTM.

1 голос
/ 02 февраля 2012

Столкнулся с некоторой сложностью сам с вращением. Поворот на 90 градусов был наиболее проблематичным.

Есть API, который прекрасно справляется с этим, и это imgscalr .

Код:

BufferedImage rotatedPhoto = Scalr.rotate(photo, Scalr.Rotation.CW_90, null);

Не использовал imgscalr для масштабирования и перевода, стандартный java.awt прекрасно с этим справится.

Так как это делает новое изображение фото; обязательно очистите / обнулите старый с помощью var.flush ();

Приветствия

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