Вращение изображения (возвращение его в исходное положение)

Используя «Аффинное преобразование», я могу легко вращать imageA. Кроме того, imageA будет двигаться вместе с imageB. Однако я не могу найти способ вернуть imageA в исходное положение после того, как я его повернул.

(Я провел некоторые исследования на некоторых сайтах, и, по-видимому, лучший способ — переместить изображение обратно в исходное положение, чтобы оно выглядело так, как будто оно вращается из точки привязки.)

Вот мой код:

public void paintComponent(Graphics g) {
    super.paintComponent(g);
    AffineTransform af = new AffineTransform();
    Graphics2D g2d = (Graphics2D) g;


    af.translate(imageBx, imageBy); // moves ImageA to imageb's position
    af.rotate(Math.toRadians(angle), imageB.getHeight(this) / 2, imageB.getWidth(this) / 2);


    g2d.drawImage(imageA, af, null);
    g2d.drawImage(imageB, imageBx, imageBy, null);
  }

Если кто-нибудь может помочь мне вернуть imageA в исходное положение (то есть прямо на imageB), это будет очень полезно!


person Kenny    schedule 11.05.2012    source источник
comment
Посмотрите, поможет ли этот пример.   -  person trashgod    schedule 11.05.2012
comment
Я просмотрел это, но код вращает всю панель, я просто хочу повернуть 1 изображение (которое связано с другим; похоже на танк и его руку) в фиксированной точке вращения.   -  person Kenny    schedule 13.05.2012


Ответы (1)


Я просмотрел это, но код поворачивает всю панель; Я просто хочу повернуть один Image в фиксированной точке поворота.

Две вещи могут помочь вам понять:

  • В приведенном примере используется rotate(double theta); ему предшествует перевод в исходное положение и после перевод в центр панели. Обратите внимание, что операции выполняются в кажущемся порядке, обратном заявленному. Ваш пример (возможно, имел в виду) вызывает rotate(double theta, double anchorx, double anchory). Оба приводят к одному и тому же результату, причем последний является удобной альтернативой первому.

  • Этот пример контрастирует с тем, как можно преобразовать графический контекст (g2d) или само изображение. В вашем примере вызывается drawImage(Image img, AffineTransform xform, ImageObserver obs), который объединяет xform с существующим графическим преобразованием; это влияет на весь последующий рисунок. Возможно, будет проще держать их отдельно.

person trashgod    schedule 13.05.2012