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

Rotate a individual rectangle and ALL its contents

我正在使用此处发布的方法 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);

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

您的 RotateRectangle 没有旋转 canvas 的矩形; 正在绘制一个旋转的矩形。

设置 TransformResetTransform 之间绘制的所有内容都将旋转绘制。

因此,如果你想让DrawString旋转,你需要在你设置Transform之后,在你重置它之前把它。

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