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);
    }

上面的代码将沿其中心旋转图像。

但是如果我尝试移动它(我将图像放在图片框的中心),图像不再沿着它的中心点旋转。

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);
    }

所以我定义了点原点来指定我的图像的位置。但它仍然不沿其中心旋转。

在此处输入图像描述

4

1 回答 1

1

是的,您想使用翻译功能。这是我为另一个问题编写的示例,该示例显示了如何翻译和旋转以及图像:

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

更新

您要做的是将平移点设置为窗口中对象中心所在的点。这会导致[0, 0]显示器的点变成那个点,所以任何旋转都会围绕它发生。然后在绘制图像时,使用图像的中点[image width / 2, image height / 2]作为 DrawImage 方法的坐标。

再次更新

抱歉,传递给 DrawImage 的坐标是图像的否定中点[0 - width / 2, 0 - height / 2]

于 2013-03-14T20:46:35.140 回答