图形垂直翻转 canvas

Graphics flip the canvas vertically

我正在从名为 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 只能四处移动但不能翻转任何东西。您可以通过取反 ScaleTransform 的参数之一来翻转它。

在 TaW 和 James Lambert 的帮助下已解决。需要通过取反 ScaleTransform 的 Y 参数来翻转轴,还需要使用 TranslateTransform:

降低 canvas
  G.TranslateTransform(0, +panel1.ClientSize.Height);
  G.ScaleTransform(scale, -scale);