我正在从名为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系列有关,但我没有成功地为这些值添加减去前缀......
答案 0 :(得分:2)
TranslateTransform只是移动东西但不能翻转任何东西。您可以通过将其中一个参数否定为ScaleTransform来翻转它。
答案 1 :(得分:1)
在TaW和James Lambert的帮助下解决了问题。需要通过否定ScaleTransform
的Y参数来翻转轴,但也可以使用TranslateTransform
将画布调低:
G.TranslateTransform(0, +panel1.ClientSize.Height);
G.ScaleTransform(scale, -scale);