图形垂直翻转画布

时间:2016-06-14 20:27:42

标签: c# graphics panel coordinate-systems

我正在从名为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系列有关,但我没有成功地为这些值添加减去前缀......

2 个答案:

答案 0 :(得分:2)

TranslateTransform只是移动东西但不能翻转任何东西。您可以通过将其中一个参数否定为ScaleTransform来翻转它。

答案 1 :(得分:1)

在TaW和James Lambert的帮助下解决了问题。需要通过否定ScaleTransform的Y参数来翻转轴,但也可以使用TranslateTransform将画布调低:

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