我有一个我在轴上绘制的字符串列表。我想旋转琴弦(再次,旋转时它们应保持在同一水平轴上)。 我正在尝试使用以下代码:
namespace DrawString
{
struct StringData
{
public string StringName;
public int X;
public int Y;
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Font mFont = new Font("Arial", 10.0f, FontStyle.Bold);
List<StringData> data = new List<StringData> { new StringData() { StringName = "Label1", X = 10, Y = 30 },
new StringData() { StringName = "Label2", X = 130, Y = 30 }};
private void Form1_Paint(object sender, PaintEventArgs e)
{
foreach (var str in data)
{
e.Graphics.RotateTransform(30);
e.Graphics.DrawString(str.StringName, mFont, new SolidBrush(Color.Black), new Point(str.X, str.Y));
e.Graphics.ResetTransform();
}
}
}
}
但它不起作用,因为Graphics一次旋转两个字符串,导致一个字符串高于另一个字符串。如何使用字符串的中心作为旋转轴单独旋转它们?
答案 0 :(得分:1)
听起来你在描述这样的事情:
private void Form1_Paint(object sender, PaintEventArgs e)
{
foreach (var str in data)
{
e.Graphics.TranslateTransform(str.X, str.Y);
e.Graphics.RotateTransform(30);
e.Graphics.DrawString(str.StringName, mFont, new SolidBrush(Color.Black), new Point(0, 0));
e.Graphics.ResetTransform();
}
}
此代码段先翻译,然后旋转,在转换后的原点绘制字符串,然后重置。两个弦在同一个X轴上以相同的角度旋转,但是来自不同的点。
答案 1 :(得分:0)
怎么样?
private void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.RotateTransform(30);
foreach (var str in data)
{
e.Graphics.DrawString(str.StringName, mFont, new SolidBrush(Color.Black), new Point(str.X, str.Y));
}
e.Graphics.ResetTransform();
}
旋转平面后,您将绘制位置
的字符串