文本标签旋转45度

本文关键字:45度 旋转 文本标签 | 更新日期: 2023-09-27 18:15:36

我试图做一个相当简单的例子,通过插入下面的代码,在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

文本标签旋转45度

With

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

值得注意的是,这些变换背后的概念来自线性代数。在底层,所有这些方法一起构建一个称为转换矩阵的数据块,然后与标签中的每个像素坐标相乘,得到要绘制的实际像素坐标。也许更精通数学的人可以更深入地解释,但我就到此为止。