2013-03-14 8 views
0

내가 원하는 것은 물체를 움직여 그 중심점을 따라 회전하는 것입니다. 변환을 위해 Matrix 클래스를 사용했습니다 :이 경우 이미지 위치를 지정하는 방법은 무엇입니까?

private void pictureBox1_Paint(object sender, PaintEventArgs e) 
    { 
     e.Graphics.ResetTransform(); 
     Matrix transformationMatrix = new Matrix(); 
     transformationMatrix.RotateAt(rot, new PointF(img.Size.Width/2, img.Size.Height/2)); 
     e.Graphics.Transform = transformationMatrix; 
     e.Graphics.DrawImage(img, 0, 0, img.Size.Width, img.Size.Height); 
    } 

위 코드는 이미지를 가운데로 따라 회전시킵니다.

하지만 움직이려고하면 (이미지를 pictureBox의 가운데에 놓음) 이미지가 중심점을 따라 더 이상 회전하지 않습니다.

e.Graphics.DrawImage(img, (pictureBox1.Width - img.Size.Width)/2, (pictureBox1.Height - img.Size.Height)/2, img.Size.Width, img.Size.Height); 

이제는 위치를 지정하기 위해 번역 기능을 사용해야한다고 생각합니다.하지만 그 방법을 찾을 방법이 없습니다. 번역은 상대적인 위치를 취합니다. 중심점을 사용하여 이미지 위치를 지정하고 중심점을 따라 이미지를 회전시킬 수 있습니다.

업데이트 2 :이

origin.X = 50; 
origin.Y = 50; 

    private void pictureBox1_Paint(object sender, PaintEventArgs e) 
    { 
     e.Graphics.TranslateTransform(origin.X, origin.Y); 
     e.Graphics.RotateTransform(rot); 
     e.Graphics.DrawImage(img, -img.Size.Width, -img.Size.Height/2, img.Size.Width, img.Size.Height); 
    } 

같은

수정 된 코드를 보면 그래서 난 내 이미지의 위치를 ​​지정하는 점 원점을 정의했다. 그러나 여전히 중심을 따라 회전하지는 않습니다.

enter image description here

+0

이것은 WPF/Silverlight입니다. 그렇지 않습니까? –

+0

아니요, Windows Forms. – Pablo

+0

아마도이 기사는 유용 할 것입니다. http://stackoverflow.com/questions/636081/how-to-rotate-scale-and-translate-a-matrix-all-at-once-in-c?rq=1 – Lainezor

답변

1

예, 당신은 번역 기능을 사용하고 싶습니다. 여기에 내가 번역하고 회전 및 이미지하는 방법을 보여줍니다 또 다른 질문에 대한 쓴 예는 다음과 같습니다

https://stackoverflow.com/a/10956388/351385

업데이트는 무엇 당신이있는 지점으로 번역 포인트를 설정하고 싶은 당신의 물체의 중심이 될 창. 이로 인해 디스플레이의 [0, 0] 지점이 그 지점이되어 회전이 발생합니다. 그런 다음 이미지를 그릴 때 이미지의 중간 점 [image width/2, image height/2]을 DrawImage 메서드의 좌표로 사용하십시오.

죄송합니다 다시 업데이트, drawImage 메소드에 전달 된 좌표는 이미지 [0 - width/2, 0 - height/2]의 부정 중간 지점이다.

+0

감사합니다. 내 게시물을 업데이트했습니다. – Pablo

+0

@Pablo 답변을 업데이트했습니다. – Tergiver

+0

업데이트 2를 참조하십시오. 내 경우에는 달성하기가 더 어려워 보입니다. 기본적으로 이미지는 정사각형 프레임에 세로로 놓여 있고 가로로 가운데에 위치한 선입니다 (설명이 명확하지 않으면 게시 할 수 있음). 빨간색 원은 320x320 정사각형의 중간 점입니다. – Pablo

관련 문제