【发布时间】:2010-06-07 17:12:13
【问题描述】:
嗨,我在旋转字符串时遇到了一些问题,我发现你需要 graphics.rotate() 但是当我改变旋转时,我什至看不到字符串。看来枢轴点已经完全让我失望了。我还看到了一个带有变换的例子,但我决定我不需要这个?
如果我的字符串是一个图形标签,从上到下阅读,我需要将它旋转 180 度以便从下到上阅读,我该怎么做?
提前致谢
【问题讨论】:
-
您将 C# 语言与一些未指定的 api 混淆了。
嗨,我在旋转字符串时遇到了一些问题,我发现你需要 graphics.rotate() 但是当我改变旋转时,我什至看不到字符串。看来枢轴点已经完全让我失望了。我还看到了一个带有变换的例子,但我决定我不需要这个?
如果我的字符串是一个图形标签,从上到下阅读,我需要将它旋转 180 度以便从下到上阅读,我该怎么做?
提前致谢
【问题讨论】:
字符串是一种数据类型,就像变量一样。我假设您的意思是要旋转显示在表单或网页上的文本。它是什么类型的应用程序?
另外,请指定字符串在什么类型的控件中显示...文本框、标签、网格视图...
【讨论】:
graphics.Rotate(180) 方法使用位置作为轴心点。因此,基本上,您的字符串会从剪辑中丢弃,并且不会在其假定的位置呈现。如果您只是在剪辑中呈现此字符串,那么在正确的位置替换它应该很容易。
这是一个临时解决方案,假设您在一个图片框内绘制并且您只是在其中呈现字符串。
g.TranslateTransform(pictureBox1.Width, pictureBox1.Height);
g.RotateTransform(180);
【讨论】:
你可以使用旋转矩阵:
cos(alpha) sin(alpha);
-sin(alpha) cos(alpha)
如果alph = 90我们得到这个矩阵
0 1;
-1 0
所以新的计算点是:Xnew = Yold and Ynew = - Xold
例如,
g.DrawString(str, new Font("Arial", 16), new SolidBrush(Color.Black), 50, 25);
g.RotateTransform(90);
g.DrawString(str, new Font("Arial", 16), new SolidBrush(Color.Black),25+8, -50-8);
g.ResetTransform();
另一个角度为 180° 的例子
Xnew = cons(alpha) * Xold +sin(alpha) Yold
Yold = -sin(alpha) * Xold + cons(alpha) Yold
Xnew = - Xold 和 Ynew = -Yold
g.RotateTransform(180);
g.DrawString(str, new Font("Arial", 16), new SolidBrush(Color.Black), -50-8 , -25-8);
g.ResetTransform();
其中 8 是字符串字体的大小除以 2。
问候,
【讨论】:
也许尝试只旋转几度以查看图形开始移动的位置? 180 可能会使其呈现“屏幕外”。
【讨论】:
如果您使用的是 Win32/GDI/GDI+,请查看我对这个问题的回答:
How to draw vertical text in Windows GUI?
如果您使用的是 HTML 或其他基于 Web 的解决方案,那么这些可能会有所帮助:
https://stackoverflow.com/search?q=vertical+text
如果您不是指垂直文本,实际上是指旋转字符串,那么您需要使用变换和拉绳。
Graphics.RotateTransform(90);
Graphics.DrawString("123456", this.Font, new SolidBrush(Color.Black), 0, 0);
当然,您可能需要翻译转换才能将文本重新显示出来。
【讨论】: