【问题标题】:C# rotate a string 180 degreesC# 将字符串旋转 180 度
【发布时间】:2010-06-07 17:12:13
【问题描述】:

嗨,我在旋转字符串时遇到了一些问题,我发现你需要 graphics.rotate() 但是当我改变旋转时,我什至看不到字符串。看来枢轴点已经完全让我失望了。我还看到了一个带有变换的例子,但我决定我不需要这个?

如果我的字符串是一个图形标签,从上到下阅读,我需要将它旋转 180 度以便从下到上阅读,我该怎么做?

提前致谢

【问题讨论】:

  • 您将 C# 语言与一些未指定的 api 混淆了。

标签: c# string


【解决方案1】:

字符串是一种数据类型,就像变量一样。我假设您的意思是要旋转显示在表单或网页上的文本。它是什么类型的应用程序?

另外,请指定字符串在什么类型的控件中显示...文本框、标签、网格视图...

【讨论】:

  • 我不认为他在问什么有太多的困惑。此外,问题的答案并不取决于所显示的控件类型。
【解决方案2】:

graphics.Rotate(180) 方法使用位置作为轴心点。因此,基本上,您的字符串会从剪辑中丢弃,并且不会在其假定的位置呈现。如果您只是在剪辑中呈现此字符串,那么在正确的位置替换它应该很容易。

这是一个临时解决方案,假设您在一个图片框内绘制并且您只是在其中呈现字符串。

g.TranslateTransform(pictureBox1.Width, pictureBox1.Height);
g.RotateTransform(180);

【讨论】:

    【解决方案3】:

    你可以使用旋转矩阵:

    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。

    问候,

    【讨论】:

      【解决方案4】:

      也许尝试只旋转几度以查看图形开始移动的位置? 180 可能会使其呈现“屏幕外”。

      【讨论】:

        【解决方案5】:

        如果您使用的是 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);
        

        当然,您可能需要翻译转换才能将文本重新显示出来。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-09-20
          • 1970-01-01
          • 1970-01-01
          • 2016-11-02
          • 1970-01-01
          • 2019-11-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多