我正在使用此处发布的方法 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);
(注意左上角的矩形) 我错过了什么吗?或者我应该去吃香蕉吗?
答案 0 :(得分:1)
你的RotateRectangle
没有旋转画布矩形;它绘制一个旋转的矩形。
设置Transform
和ResetTransform
之间的所有内容都将被轮换绘制。
因此,如果您希望旋转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();
}