C# 旋转后,MeasureString不会返回精确的宽度

C# 旋转后,MeasureString不会返回精确的宽度,c#,winforms,graphics,text-size,C#,Winforms,Graphics,Text Size,我正在使用MeasureString方法来计算文本的宽度,但返回的值不准确。我使用下面的代码来计算文本宽度 Size sz = g.MeasureString(text, font); g.DrawString(text, font, brush, new Rectangle(0, 0, (int)sz.Width, (int)sz.Height), stringFormat); g.DrawRectangle(Pens.Red, new Rectangle(0, 0

我正在使用
MeasureString
方法来计算文本的宽度,但返回的值不准确。我使用下面的代码来计算文本宽度

Size sz = g.MeasureString(text, font);
g.DrawString(text, font, brush, 
             new Rectangle(0, 0, (int)sz.Width, (int)sz.Height), stringFormat);
g.DrawRectangle(Pens.Red, new Rectangle(0, 0, (int)sz.Width, (int)sz.Height));
这在没有旋转的情况下工作良好。我正在使用以下代码绘制旋转文本

g.RotateTransform(angle);
Size sz = g.MeasureString(text, font);
g.DrawString(text, font, brush, 
             new Rectangle(0, 0, (int)sz.Width, (int)sz.Height), stringFormat);
g.DrawRectangle(Pens.Red, new Rectangle(0, 0, (int)sz.Width, (int)sz.Height));
为第二个代码段返回的宽度值与第一个不同,而且不正确。请参见下图

在矩形的底部,文本后面还有一些额外的空格。矩形是根据字符串的宽度和高度绘制的,因此我认为这与
MeasureString
方法有关

请分享你对避免这种情况的想法

编辑:

如果文本长度较长(比如30个或更多字符),则可以看到更多的空间。旋转可以很好地用于角度0、90、180和270。附上一张截图


你确定那里没有空位吗?否则,度量有时不准确,我甚至会在旋转文本上猜得更少。为什么不在字符串未旋转时测量它,并一直使用该值?@Vajura,在旋转前计算文本大小会产生更多的空间。对于字体未在屏幕上对齐的旋转,该算法似乎不精确。您可以使用GDI+在
System.Drawing.Image
上绘制字符串和矩形(创建图像),然后旋转图像本身。这应该可以解决问题,因为将首先创建图像,然后旋转整个计算图像。@ps2goat,您的建议可用于解决问题,但我需要用于控制级别。在我们的控件中,我们支持文本旋转,它可以正常工作到180度,但是在180度旋转之后,我们开始看到文本应该放置的位置和实际放置位置之间的空白。现在,我正在检查MeasureCharacterRanges和其他可用的方法来计算范围。感谢您的评论。请使用
MeasureString
格式,其中包括
stringformat
<代码>排版是推荐的。。