c# - 文本标签旋转 45 度

标签 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();
}

问候 新蜂

最佳答案

e.Graphics.RotateTransform(-45);

您犯的错误是认为它会围绕标签旋转,而实际上它是围绕 Canvas 的 (0, 0) 点旋转。您可以通过将 Canvas 的 (0, 0) 移动到标签,执行旋转,然后将其移回来解决此问题。像这样

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

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

关于c# - 文本标签旋转 45 度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25044574/

相关文章:

c# - 在 C# 中对分组结果进行排序

java - 能够查看每个类(class)的文本

c# - C#中使用GEO坐标绘制 map

C# 使用 PdfSharp 从 PDF 中提取文本

bash——在运行之间存储变量的更好方法?

swift - 使用图表 UI 时如何获取突出显示点的 x 值?

python - 使用掩码获取 2D NumPy 数组的特定值的位置

c# - Azure 构建 - 命名空间 'OpenApi' 中不存在类型或命名空间名称 'Microsoft'

C# 接口(interface)返回类型

c# - 在c#中使用Antlr4解析大文件时如何解决OutOfMemoryException?