我试图通过插入下面的代码来制作一个相当简单的在 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/