2016-12-15 13 views
0

Вот мой исходный код. Кажется, я не могу получить растровое изображение, чтобы показать линии, нарисованные на панели, когда я перемещаю мышь при нажатой кнопке. Разочарованный и ищет кого-то, кто поможет мне закончить код, чтобы я мог завершить приложение для своей 9-летней дочери. Заранее благодарю вас ...Программа рисования на C# не создает никаких строк на экране, так как я пытался рисовать с использованием растрового изображения

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-contenttoto -a-file –

+0

Хорошо, спасибо вам снова. Я читаю его сейчас ... –