2012-05-23 3 views
0

이미지 상자에 다각형 목록을 그리려고합니다. 지금까지 화면의 왼쪽 상단 모서리에 검은 색 대각선 만 나타납니다. 다음과 같이 포인트는ImageBox 그래픽 실수

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); 

     } 
    } 

이미지 상자에 폴리곤이 나타나지 않는 이유는 무엇입니까? 색상은 상자의 크기 나 이슈가 아닙니다.

답변

0

Paint 이벤트를 사용하여이 메소드를 호출하는 것처럼 보이지만 호출 할 때 데이터를 사용할 수 있어야합니다. 페인트 이벤트가 지속적으로 호출되지 않으므로 그리는 데이터를 추가하면 paintBox1.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 
} 

희망이

을하는 데 도움이