7

我可以将面板和文本旋转 90º,它对我有用。但是旋转 180º 不起作用,我看不到文字。我能做些什么来修复它?

else if (m_orientation == AfyLabelOrientation.TurnedLeft90)
        {
            e.Graphics.TranslateTransform(0, this.Height - 5);
            e.Graphics.RotateTransform(270);

            if (!TextShadow_)
            {
                e.Graphics.DrawString(this.Text, this.Font, new SolidBrush(this.ForeColor), new RectangleF(Padding.Left, Padding.Top, this.Height, this.Width));
            }
            else if (TextShadow_)
            {
                //Drawing text shadow
                e.Graphics.DrawString(this.Text, this.Font, new SolidBrush(Color.Gray), new RectangleF(Padding.Left + 1, Padding.Top - 1, this.Height, this.Width));

                //Drawing text
                e.Graphics.DrawString(this.Text, this.Font, new SolidBrush(this.ForeColor), new RectangleF(Padding.Left, Padding.Top, this.Height, this.Width));
            }
        }
        else if(m_orientation == AfyLabelOrientation.Overturned)//This don't work
        {
            e.Graphics.TranslateTransform(this.Width, 0);
            e.Graphics.RotateTransform(180);

            if (!TextShadow_)
            {
                e.Graphics.DrawString(this.Text, this.Font, new SolidBrush(this.ForeColor), new RectangleF(Padding.Left, Padding.Top, this.Height, this.Width));
            }
            else if (TextShadow_)
            {
                //text shadow
                e.Graphics.DrawString(this.Text, this.Font, new SolidBrush(Color.Gray), new RectangleF(Padding.Left + 1, Padding.Top - 1, this.Height, this.Width));

                //text
                e.Graphics.DrawString(this.Text, this.Font, new SolidBrush(this.ForeColor), new RectangleF(Padding.Left, Padding.Top, this.Height, this.Width));
            }
        }
4

2 回答 2

9

如果我明白了,您需要翻译到对象以保持其中心。

RotateTransform总是绕原点旋转。因此,您需要先将旋转中心平移到原点,然后旋转,然后再将其平移回来。

//move rotation point to center of image
g.TranslateTransform((float)this.Width/2, (float)this.Height / 2);
//rotate
g.RotateTransform(angle);
//move image back
g.TranslateTransform(-(float)this.Width/2,-(float)this.Height / 2);
于 2013-10-03T11:34:01.623 回答
1

您尝试旋转的可能是容器的左上角。然后,旋转围绕对象的左上角旋转,因此 180 度旋转将对象移出视图窗口。

________
|text   |
_________

被旋转成类似的东西:

    _______
text|      |
    ________

当然,我不是在text旋转绘画,而只是试图指出它的位置。将旋转点移动到文本的中间或在旋转后向右移动文本的宽度以将文本放置在正确的位置。

于 2013-10-03T11:38:09.470 回答