旋转单个矩形及其所有内容

时间:2015-03-02 02:52:22

标签: c# drawing rotatetransform

我正在使用此处发布的方法 Using a matrix to rotate rectangles individually

(我希望这不是转发,如果它可能是我做错了什么)

我正在使用完美定义的RotateRectangle方法,如下所示

 public void RotateRectangle(Graphics g, Rectangle r, float angle)
    {
        using (Matrix m = new Matrix())
        {
            m.RotateAt(angle, new PointF(r.Left + (r.Width / 2),
                                      r.Top + (r.Height / 2)));
            g.Transform = m;
            g.DrawRectangle(Pens.Black, r);
            g.ResetTransform();
        }
    }

然后在我的绘图上我创建了一个标签,并在其外面创建了一个矩形

g.DrawString("e/10", fnt2, new SolidBrush(Color.Black), (int)(ecobdesenho / 10) / 2 + esp - 15, esp - 25); //15 para tras, 15 para cima

            Rectangle r1 = new Rectangle((int)(ecobdesenho / 10) / 2 + esp - 15, esp - 25, 25, 12);


            RotateRectangle(g, r1, 40);

enter image description here

(注意左上角的矩形) 我错过了什么吗?或者我应该去吃香蕉吗?

1 个答案:

答案 0 :(得分:1)

你的RotateRectangle没有旋转画布矩形;它绘制一个旋转的矩形。

设置TransformResetTransform之间的所有内容都将被轮换绘制。

因此,如果您希望旋转DrawString,则需要在设置变换后将其置于重置之前。

using (Matrix m = new Matrix())
{
    m.RotateAt(angle, new PointF(r.Left + (r.Width / 2),
                              r.Top + (r.Height / 2)));
    g.Transform = m;
    g.DrawString("e/10", fnt2, new SolidBrush(Color.Black), (int)(ecobdesenho / 10) / 2 + esp - 15, esp - 25); //15 para tras, 15 para cima
    g.DrawRectangle(Pens.Black, r);
    g.ResetTransform();
}