내가 원하는 것은 물체를 움직여 그 중심점을 따라 회전하는 것입니다. 변환을 위해 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);
}
같은
수정 된 코드를 보면 그래서 난 내 이미지의 위치를 지정하는 점 원점을 정의했다. 그러나 여전히 중심을 따라 회전하지는 않습니다.
이것은 WPF/Silverlight입니다. 그렇지 않습니까? –
아니요, Windows Forms. – Pablo
아마도이 기사는 유용 할 것입니다. http://stackoverflow.com/questions/636081/how-to-rotate-scale-and-translate-a-matrix-all-at-once-in-c?rq=1 – Lainezor