c#已知坐标点数组的情况下用Graphics画点。

2020-04-01 09:26发布

问题:

想在Panel上用下面的Lx / ratio、Ly / ratio当做横纵坐标画点,用这个方法

grp.FillEllipse(Brushes.Red, pps [i].x, pps[i].y , 2, 2);

但是总是错误提示 无效参数
FillEllipse()方法中,后4位是整数,上面的pps [i].x,类型是整数吗
想请教一下大家有什么比较好的方法,把点画出来吗

List<point1> ps = new List<point1>();

            for (int i = 0; i < table.Rows.Count; i++)//遍历每一行
            {
                for (int j = 0; j < table.Columns.Count; j++)//遍历列
                {
                    x = Convert.ToDouble(table.Rows[i][0]);
                    y = Convert.ToDouble(table.Rows[i][1]);

                    double Lx = maxLatitude - x;
                    double Ly = y - minLongitude;
                    //MessageBox.Show(Ly + "");

                    point1 p = new point1();
                    p.x = (int)(Lx / ratio);
                    //MessageBox.Show(Ly/ratio+"");
                    p.y = (int)(Ly / ratio);
                    ps.Add(p);
                    //MessageBox.Show(ps+"");看不出来

                }
            }
            //画图

            int [] psx = ps.Select(p => p.x).ToArray();
            int[] psy = ps.Select(p => p.y).ToArray();
            
            point1[] pps = ps.ToArray();
            
            Graphics grp = panel1.CreateGraphics();
            Pen ppen = new Pen(Color.Red, 1);
        
            for (int i = 0; i < psx.Length-1; i++)
            {
                    grp.FillEllipse(Brushes.Red, pps [i].x, pps[i].y , 2, 2);
                    grp.Dispose();
            }
        }
        
        public class point1
        {
            public int x { get; set; }
            public int y { get; set; }
        }

回答1:

你这段代码问题有点多

  1. 第二个for循环看起来没有什么用
  2. psx和psy看起来没有什么用
  3. pps那行ToArray毫无意义
  4. point1没有什么用
  5. 最重要的,在for循环中进行了Dispose操作,第二次画点的时候肯定会失败啊