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

位置を指定するには、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 に答える