2012-05-11 4 views
2

"Affine Transformation"을 사용하면 imageA을 쉽게 회전시킬 수 있습니다. 또한 imageAimageB과 함께 이동합니다. 그러나 나는 그것을 회전시킨 후에 imageA을 원래 위치로 되돌릴 방법을 찾지 못하는 것 같습니다.회전 이미지 (원래 위치로 되돌리기)

는 (I 일부 사이트에 대한 몇 가지 연구를하고 분명히 가장 좋은 방법은 그것의 앵커 지점에서 회전하는 것처럼 보이도록 원래 위치로 다시 이미지를 이동하는 것입니다.)

Heres는 내 코드까지 : 그 누구도 날 (오른쪽 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); 
    } 

!

+2

[예제] (http://stackoverflow.com/a/3420651/230513)가 도움이되는지 확인하십시오. – trashgod

+0

그걸 보았지만 코드가 전체 패널을 회전 시켰고 고정 된 회전 지점에서 1 개의 이미지 (다른 이미지와 연결되어 있고 탱크와 팔과 유사 함)를 회전하려고합니다. – Kenny

답변

2

나는 그것을 보았지만, code은 전체 패널을 회전시켰다. 고정 회전 지점에서 Image 한 개를 회전하기 만하면됩니다.

이해 안내하는 데 도움이 될 두 가지 다음 example 인용

  • rotate(double theta)를 사용을; 그것은 이 기원으로 번역하여에 선행하고 은 패널 중심을 번역하여을 성공했습니다. 연산은 명시된 명백한 순서로 수행됩니다. 귀하의 예 (의미가있을 수도 있음)는 rotate(double theta, double anchorx, double anchory)입니다. 이 두 가지 결과는 동일한 결과를 초래하며, 후자는 전자의 편리한 대안입니다.

  • example은 그래픽 컨텍스트 (g2d) 또는 이미지 자체를 어떻게 변환 할 수 있는지를 대조합니다. 귀하의 예는 drawImage(Image img, AffineTransform xform, ImageObserver obs)을 호출합니다. 이는 xform을 기존 그래픽 변환에 연결합니다. 이것은 모든 후속 드로잉에 영향을 미칩니다. 별도로 유지하는 것이 더 쉬울 수도 있습니다.

+0

감사합니다. 내 문제가 해결되었습니다. – Kenny

관련 문제