我从一个名为line
的列表中放置坐标,用我的panel1缩放它们,并用GraphicsPath
绘制连接它们的线。我遇到的问题是图像被垂直翻转,可能是因为panel1的(0,0)
坐标在左上角,而我的法线坐标源于左下角有零的坐标系。代码如下:
Graphics G = e.Graphics;
GraphicsPath gp = new GraphicsPath();
foreach (var line in tockeKoordinate)
{
gp.AddLine((float)(line.startX), (float)(line.startY),
(float)(line.endX), (float)(line.endY));
gp.CloseFigure();
}
var rect = gp.GetBounds();
var scale = Math.Min(1f * (int)(panel1.ClientSize.Width) / rect.Width,
1f * (int)(panel1.ClientSize.Height) / rect.Height);
using (Pen pen = new Pen(Color.DarkGreen, 0.0001f))
{
G.SmoothingMode = SmoothingMode.AntiAlias;
G.Clear(Color.White);
G.ScaleTransform(scale, scale);
G.TranslateTransform(-rect.X, -rect.Y);
G.DrawPath(pen, gp);
}
我一直在搜索,不知怎么的,这与G.TranslateTransform行有关,但我在值中添加减号前缀的成功率为零。。。
TranslateTransform只是移动东西,但不能翻转任何东西。可以通过将其中一个参数否定为"缩放变换"来翻转它。
在TaW和James Lambert的帮助下解决。需要通过否定ScaleTransform
的Y参数来翻转轴,但也需要使用TranslateTransform
:降低画布
G.TranslateTransform(0, +panel1.ClientSize.Height);
G.ScaleTransform(scale, -scale);