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