2016-12-15 4 views
0

Voici mon code source. Je n'arrive pas à obtenir le bitmap pour montrer les lignes dessinées sur le panneau lorsque je bouge la souris avec le bouton enfoncé. Frustré et à la recherche de quelqu'un pour m'aider à terminer le code afin que je puisse terminer l'application pour ma fille de 9 ans. Merci d'avance ...C# programme de peinture ne créera pas de lignes sur l'écran depuis que j'ai essayé de dessiner en utilisant un bitmap

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

Répondre

1

BP est juste une variable dans la forme. Comme je peux le voir, il n'est affiché nulle part dans votre formulaire. Pourquoi avez-vous besoin d'un bitmap pour cela. Vous pouvez faire quelque chose comme ça, il suffit d'obtenir les graphiques de votre formulaire, et dessinez en utilisant ce graphique. https://msdn.microsoft.com/en-us/library/ztxk24yx(v=vs.110).aspx

A pris note: vous devez le faire sur paintEvent du formulaire, sinon votre dessin sera supprimé après la prochaine repeindre, vous devez donc certaines variables pour stocker toutes vos lignes, puis tirer tous dans la événement de peinture.

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

Mise à jour: Si vous voulez enregistrer votre modification à un bitmap. Vous pouvez utiliser Form.DrawToBitmap pour enregistrer votre dessin dans le formulaire à un bitmap, puis appelez bitmap.Save() à un fichier dans le répertoire.

+0

Merci d'avoir répondu. J'essaie de créer un programme de peinture qui n'efface pas le panneau lorsqu'il est déplacé hors de l'écran ou que quelque chose d'autre est placé dessus. Donc, on m'a dit d'implémenter un bitmap et de dessiner sur le bitmap au lieu du panneau. Mon prochain objectif est de pouvoir enregistrer l'image dans un fichier si elle veut enregistrer l'image qu'elle a créée. J'espère que cela a du sens ... –

+0

Si oui, je pense que vous pouvez faire quelque chose comme ça http://stackoverflow.com/questions/26936109/how-do-i-save-a-winforms-panels-drawing-content-to -a-file –

+0

Ok merci encore. Je le lis maintenant ... –