0

我正在尝试将多边形列表绘制到图像框。到目前为止,我只在屏幕的左上角看到一条对角黑线。要点如下:

20,20 0,20 20,0 40,40

200,100 0,20 20,0 20,20

100, 200 0, 200 200,0 250, 450

150,130 1,20 20,0 10,20

    private void pictureBox1_Paint_1(object sender, PaintEventArgs e)
    {
        int jobIndex = 0;
        int trussIndex = 0;

        Graphics g = e.Graphics;
        foreach (Member m in jobArray[jobIndex].trusses[trussIndex].members)
        {
            Point[] pointArray = new Point[m.poly.Points.Count()];
            //m.poly.Points.CopyTo(pointArray, 0);
            int index =0;
            foreach(System.Windows.Point p in m.poly.Points)
            {
                pointArray[index].X = (int)p.X;
                pointArray[index].Y = (int)p.Y;
                index++;
            }
            Pen myPen = new Pen(Color.Black);
            SolidBrush myBrush = new SolidBrush(m.color);

            g.DrawPolygon(myPen, pointArray);
            g.FillPolygon(myBrush, pointArray);

        }
    }

关于为什么多边形没有出现在图像框上的任何想法?颜色不是问题,也不是盒子的大小

4

1 回答 1

0

看起来您使用 Paint 事件来调用此方法,请确保在调用它时您有可用的数据。绘制事件不会经常调用,因此如果添加要绘制的数据,则需要调用 pictureBox1.Invalidate() 方法来强制绘制事件。

我相信您迟早会看到这一点,但您应该创建一个图像(位图)对象并将其分配给 PictureBox 的 Image 属性。然后使用 Graphics.FromImage(_image) 来获取您的图形对象。如果你不这样做,那么如果窗口被覆盖然后又回到焦点,或者你将它拖出屏幕然后再回来,你的图像就不会留下来。

private Bitmap _bitMap;
private Graphics _graphic;
Pen myPen;

public Constructor()
{
    _bitMap = new Bitmap(pictureBox1.Width,pictureBox1.Height);
    _graphic = Graphics.FromImage(_bitMap);
    pictureBox1.Image = _bitMap;
    myPen = new Pen(Color.Black);
}
private void DataAdded()
{
    int jobIndex = 0;
    int trussIndex = 0;

    foreach (Member m in jobArray[jobIndex].trusses[trussIndex].members)
    {
        //Pen myPen = new Pen(Color.Black); //Don't instantiate in a loop
        SolidBrush myBrush = new SolidBrush(m.color);
        _graphic.DrawPolygon(myPen, m.poly.Points.ToArray());
        _graphic.FillPolygon(myBrush, m.poly.Points.ToArray());
    }
    pictureBox1.Image = _bitMap; //Don't think you need this, but I don't remember
}

希望这可以帮助

于 2012-05-24T00:28:13.360 回答