C# 以不同的旋转方式绘制文本的正确方法是什么?

C# 以不同的旋转方式绘制文本的正确方法是什么?,c#,gdi+,system.drawing,C#,Gdi+,System.drawing,我开发了一个应用程序来创建、编辑和打印标签。在该应用程序中,可以插入有多行文本的矩形,用户可以在0°、90°、270°和180°之间设置字体、颜色、..和方向。因此,我编写了一个方法,使用GDI+和DrawString方法,根据方向在边框内绘制文本 switch (RotationAngle) { case 90: g.RotateTransform(90);

我开发了一个应用程序来创建、编辑和打印标签。在该应用程序中,可以插入有多行文本的矩形,用户可以在0°、90°、270°和180°之间设置字体、颜色、..和方向。因此,我编写了一个方法,使用GDI+和DrawString方法,根据方向在边框内绘制文本

 switch (RotationAngle)
            {
                case 90:
                    g.RotateTransform(90);
                    objRec = DrawRectangle.GetNormalizedRectangle(objRec.Top, -objRec.Left,
                        objRec.Bottom, -objRec.Right);
                    g.DrawString(lines[i], textFont, brush, objRec, sf);
                    g.RotateTransform(-90);
                    break;
                case 180:
                    g.RotateTransform(180);
                    objRec = DrawRectangle.GetNormalizedRectangle(-objRec.Left, -objRec.Top,
                        -objRec.Right, -objRec.Bottom); 
                    g.DrawString(lines[i], textFont, brush, objRec, sf);
                    g.RotateTransform(-180);
                    break;
                case 270:
                    g.RotateTransform(270);
                    objRec = DrawRectangle.GetNormalizedRectangle(-objRec.Top, +objRec.Left,
                      -objRec.Bottom, +objRec.Right);
                    g.DrawString(lines[i], textFont, brush, objRec, sf);
                    g.RotateTransform(-270);
                    break;
                case 0:
                    g.DrawString(lines[i], textFont, brush, objRec, sf);
                    break;
            }
其中“objRect”是用户设置的原始矩形。该方法适用于所有方向,但不适用于180°!在这种情况下,文本以0度绘制。我真的不知道该怎么办,我正在疯狂地寻找解决问题的正确方法。 以不同的旋转方式绘制文本的正确方法是什么?
任何帮助都是愉快的。提前感谢。

我尝试了简化版的代码(没有
GetNormalizedRectangle()
调用),在180度时,文本被旋转绘制;这个bug可能在应用程序的另一部分吗?您能否通过调试确认执行了
case 180:
?我已经尝试过调试,并执行了case,但问题是,在180的情况下,绘制文本的整个页面似乎都在旋转,而同一标签中的所有其他对象都不在其正确的位置,就好像g.RotateTransform(-180)一样恢复图形状态的指令不起作用。同样的事情不会发生在其他方向,所以我真的不知道如何管理它!!当我在切换前后绘制额外的文本时,我得到了所有旋转的正确结果。你有没有检查过代码的其他部分是否有旋转?在输入
开关之前,您可以尝试调用
g.ResetTransform()
,查看是否有变化。