2014-09-20 2 views
0

저는 현재 회전 이미지를 Java로보고 있습니다. 일부 스프라이트를 회전해야하는 물리 시뮬레이션을 만들 예정입니다. 나는 그림을 회전시킬 수 있었지만 정확히 90도, 180도 또는 270도 회전시키지 않으면 이미지의 왼쪽 상단 모서리가 잘 리게됩니다. 나는 회전 중심에 대해 어딘가에서 (width/2, height/2)가 아닌 것을 읽었으므로 다른 매개 변수를 시도하고 거의 모든 구석을 가졌지 만 패널에 대한 이미지의 상대적 위치가 중심에서 다른 것으로 바뀌 었습니다 . 누구든지이 일을 어떻게하는지, 내가 어떻게 해결할 수 있는지 알고 있습니까?회전 이미지가 모서리를 자릅니다.

@Override 
    public void paintComponent(Graphics graphics) 
    { 
     Graphics2D g2d = (Graphics2D) graphics; 
     super.paintComponent(g2d); 

     double rotate = Math.toRadians(45); 
     double X = image.getWidth()/2; 
     double Y = image.getHeight()/2; 


     AffineTransform tx = AffineTransform.getRotateInstance(rotate, X, Y); 
     AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR); 

     g2d.drawImage(op.filter(image, null), 200, 200, null); 
    } 
:

  1. Not rotated
  2. Rotated around (width/2, height/2)
  3. Rotated around (width/2, height)

내가 사용하는 코드는 다음과 같다 : 여기

은 세 가지 이미지 내가 무슨 말을하는지 보여주고있다

각도가 무엇이든 언급 할 가치가 있습니다. 항상 왼쪽 상단이 잘립니다.

편집 : 그래서 나는 (이미지. 회전 후에도 표시되지만 회전 전과 같은 위치에 있지 않습니다. 이것이 나에게 말하는 것은 사후 처리 된 이미지가 쓰여지는 "캔버스"가 무엇 이건간에 X/Y 축에서 이미지 자체가 커진다는 것입니다. 아마도 그림이 X/Y 축에서 얼마나 움직 였는지 알 수있는 알고리즘을 작성하여 원래 위치로 되돌릴 수 있습니다. 그러나 이것은 무언가를 "기본"으로 무언가를 회전시키는 것으로 몹시 복잡해 보입니다.

답변

0

내가

당신이, 당신이 그리는 느릅 나무에 해당 패널을 만들고 (좋아, 더 큰 1.5 시간도 충분하다)가 두 배 할

... 당신의 그래픽 이미지보다 작은 오브젝트 것을 확신 그리고 그래픽의 중심을 중심으로 이미지를 회전시켜야합니다. 그러면 이미지가 제대로 그려집니다!

불행히도 내 이론을 검증 할 수있는 충분한 코드를 제공하지 못했을 것입니다. 컨테이너를 만들거나 내 이론을 테스트하고 확인하거나 잘못했다고 증명할 수있는 부분을 추가 할 수 있습니다 ...

죄송합니다. 이번에 첨부 된 코드는 ...

관련 문제