C#旋转变换

时间:2013-10-03 11:07:38

标签: c# .net winforms

我可以将面板和文字旋转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));
            }
        }

2 个答案:

答案 0 :(得分:6)

如果我得到它,你需要转换为对象以保持其中心。

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);

答案 1 :(得分:1)

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

________
|text   |
_________

旋转为:

    _______
text|      |
    ________

当然我不是在绘制text旋转,而是试图说明它的位置。将旋转点移动到文本的中间,或者在旋转后将文本的宽度向右移动,最后将文本放在正确的位置。