我想要的是移动对象并沿其中心点旋转。我使用 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);
}
上面的代码将沿其中心旋转图像。
但是如果我尝试移动它(我将图像放在图片框的中心),图像不再沿着它的中心点旋转。
e.Graphics.DrawImage(img, (pictureBox1.Width - img.Size.Width) / 2, (pictureBox1.Height - img.Size.Height) / 2, img.Size.Width, img.Size.Height);
现在我想我必须使用 Translate 函数来指定位置,但我不知道该怎么做。平移采用相对位置。我想使用其中心点指定图像位置并能够沿其中心旋转它。
更新 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);
}
所以我定义了点原点来指定我的图像的位置。但它仍然不沿其中心旋转。