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