Странное вращение в графике C # - PullRequest
0 голосов
/ 03 декабря 2010

Я использую метод OnPaint в своем классе Class1: Panel.

protected override void OnPaint(PaintEventArgs e)
{
    base.OnPaint(e);
    Graphics g = e.Graphics; 
}

, чтобы вращать и рисовать прямоугольник. Я использую

Matrix m = new Matrix();
m.RotateAt(90, rotationPoint);
g.Transform = m;
g.FillRectangle(Brushes.Black, rectangle)

. Проблема в том, что вращение неработая так, как я хочу.

http://i52.tinypic.com/2rca2ic.png

Красный квадрат - это точка вращения, и он расположен в середине вершины прямоугольника.Как установить x, y и точку вращения, чтобы вращение работало правильно?

После поворота на 90 градусов это должно выглядеть так:

i53.tinypic.com/2co25wj.png

красный пиксель все ещев том же месте.

1 Ответ

1 голос
/ 03 декабря 2010

Точка вращения - это не точка, которую вы хотите повернуть.Это точка, , вокруг которой вращается графика.Так что если вы рисуете прямоугольник в верхней части графики и хотите повернуть его (прямоугольник) - тогда вам следует установить точку поворота как центр графики и повернуть изображение на 90 градусов.Вот пример, который делает почти то, что вы хотите:

base.OnPaint(e);

var g = e.Graphics;
var width = g.VisibleClipBounds.Width;
var height = g.VisibleClipBounds.Height;
var rotationPoint = new PointF(width / 2, height / 2); ;

// draw center point
g.FillRectangle(Brushes.Red, new RectangleF(rotationPoint.X - 5, rotationPoint.Y - 5, 10, 10));

using (var path = new GraphicsPath())
{
    var rectangle = new RectangleF((width - 10) / 2, 0, 10, 10);
    var m = new Matrix();
    m.RotateAt(90, rotationPoint);
    path.AddRectangle(rectangle);
    path.Transform(m);

    // draw rotated point
    g.FillPath(Brushes.Black, path);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...