2016-12-15 13 views
0

다음은 내 소스 코드입니다. 버튼을 누른 채로 마우스를 움직일 때 패널에 그린 선을 표시하는 비트 맵을 얻지 못하는 것 같습니다. 실망스럽고 누군가를 찾고 코드 작성을 도와 주므로 9-yo 딸을위한 앱을 완성 할 수 있습니다. 사전에 감사드립니다 ...비트 맵을 사용하여 그리려고했기 때문에 C# paint 프로그램이 화면에 선을 만들지 않습니다.

namespace TV_PAINT 
{ 
    public partial class ALANA_PAINT : Form 
    { 
     Graphics g; 
     Pen p = new Pen(Color.Black, 7); 
     Point sp = new Point(0, 0); 
     Point ep = new Point(0, 0); 
     int m = 0; 
     Bitmap BP; 

     public ALANA_PAINT() 
     { 
      InitializeComponent(); 
      tb1.Text = p.Width.ToString(); 
      BP = new Bitmap(pnl1.ClientSize.Width, pnl1.ClientSize.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); 

     } 

     private void closeButton_Click(object sender, EventArgs e) 
     { 
      pnl1.Dispose(); 
      p.Dispose(); 
      this.Close(); 
     } 

     private void clearButton_Click(object sender, EventArgs e) 
     { 
      //pnl1.Invalidate(); 
      p.Color = System.Drawing.Color.Black; 
      p.Width = 7; 
      tb1.Text = p.Width.ToString(); 
      //pnl1.Invalidate(); 
     } 

     private void pnl1_MouseDown(object sender, MouseEventArgs e) 
     { 
      sp = e.Location; 
      if (e.Button == MouseButtons.Left) 
       m = 1; 
      if (e.Button == MouseButtons.Right) 
       m = 1; 
     } 

     private void pnl1_MouseMove(object sender, MouseEventArgs e) 
     { 
      if (m == 1) 
      { 
       ep = e.Location; 
       //g = pnl1.CreateGraphics(); 
       Graphics g = Graphics.FromImage(BP); 
       g.DrawLine(p, sp, ep); 
      } 
      sp = ep; 
     } 

     private void pnl1_MouseUp(object sender, MouseEventArgs e) 
     { 
      m = 0; 
     } 

답변

1

BP는 단지 형식의 변수 일뿐입니다. 보시다시피, 귀하의 양식 어디에도 표시되지 않습니다. 왜 비트 맵이 필요한가요? 다음과 같이 할 수 있습니다. 양식의 그래픽을 가져 와서 그래픽을 사용하여 그릴 수 있습니다. https://msdn.microsoft.com/en-us/library/ztxk24yx(v=vs.110).aspx

에 주목 : 당신이 당신의 모든 라인을 저장하기 위해 몇 가지 변수를 필요로하므로, 다음에 그들 모두를 그릴, 그렇지 않으면 도면이 다음 칠하고 후 제거됩니다 양식의 PaintEvent에 그것을 할 필요가 페인트 이벤트.

System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Red); 
System.Drawing.Graphics formGraphics; 
formGraphics = this.CreateGraphics(); 
formGraphics.FillRectangle(myBrush, new Rectangle(0, 0, 200, 300)); 
myBrush.Dispose(); 
formGraphics.Dispose(); 

업데이트 : 비트 맵에 대한 변경 사항을 저장합니다. Form.DrawToBitmap을 사용하여 양식의 그림을 비트 맵에 저장 한 다음 bitmap.Save()를 디렉토리의 파일로 호출 할 수 있습니다.

+0

감사합니다. 화면 밖으로 이동하거나 다른 항목을 위에 놓을 때 패널을 지우지 않는 페인트 프로그램을 만들려고합니다. 그래서 비트 맵을 구현하고 패널 대신 비트 맵에 그려야한다고 들었습니다. 내 다음 목표는 자신이 만든 그림을 저장하려면 파일에 비트 맵을 저장할 수 있도록하는 것입니다. 희망이 이해가 ... –

+0

만약 그렇다면, 당신이 뭔가를 할 수있을 것 같아 http://stackoverflow.com/questions/26936109/how-do-i-save-a-winforms-panels-drawing-content-to -a-file –

+0

다시 한번 감사드립니다. 나는 지금 그것을 읽고있다. .. –