文字标签旋转45度

时间:2014-07-30 18:46:07

标签: c# text coordinates

我试图通过插入下面的代码,在C#中编写一个相当简单的示例转换文本标签...我在此之后做的就是创建一个名为label1的标签。我们的想法是让drawString从label1的0,0开始,然后向右上升。 状态是,文本按预期写入但是具有失败的X,Y坐标。欢迎提出好的建议: - )

protected override void OnPaint(PaintEventArgs e)
{
    // Create string to draw.
    String drawString = "Text to start at label start";

    // Create font and brush.
    Font drawFont = new Font("Arial", 8);
    SolidBrush drawBrush = new SolidBrush(Color.Black);

    // Create point for upper-left corner of drawing.
    PointF drawPoint = label1.Location;

    // Rotate -45 degrees 
    e.Graphics.RotateTransform(-45);

    StringFormat formatter = new StringFormat();
    formatter.LineAlignment = StringAlignment.Near;
    formatter.Alignment = StringAlignment.Near;

    // Draw string to screen.
    e.Graphics.DrawString(drawString, drawFont, drawBrush, drawPoint, formatter);
    e.Graphics.ResetTransform();
}

此致 NewBee

1 个答案:

答案 0 :(得分:2)

使用

e.Graphics.RotateTransform(-45);

你所犯的错误是认为这会围绕标签旋转,而事实上它会围绕画布的(0,0)点旋转。您可以通过将画布(0,0)移动到标签,执行旋转,然后将其移回来解决此问题。喜欢这个

e.Graphics.TranslateTransform(drawPoint.X, drawPoint.Y);
e.Graphics.RotateTransform(-45);
e.Graphics.TranslateTransform(-drawPoint.X, -drawPoint.Y);

值得注意的是,这些变换背后的概念来自线性代数。在引擎盖下,所有这些方法共同构建一个称为变换矩阵的数据,然后与标签中的每个像素坐标相乘,从而得到实际的像素坐标。也许更熟悉数学的人可以更深入地解释,但我会停在那里。