2010-11-17 8 views
0

J'ai créé un programme qui permet aux utilisateurs de dessiner des lignes sur une image de la zone d'image, mais qui doivent maintenant enregistrer ces lignes pour les ouvrir ultérieurement. Ceci est mon code actuel pour dessiner les lignes:Enregistrer les graphiques bitmap dessinés par l'utilisateur dans C#

public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
      pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height); 
     } 
     int Drawshape; 




     private Point p1, p2; 
     List<Point> p1List = new List<Point>(); 
     List<Point> p2List = new List<Point>(); 

     private void Form1_MouseDown(object sender, MouseEventArgs e) 
     { 


     } 

     private void Form1_Paint(object sender, PaintEventArgs e) 
     { 

     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      Drawshape = 5; 
     } 

     private void button2_Click(object sender, EventArgs e) 
     { 
      Drawshape = 2; 
     } 

     private void pictureBox1_MouseDown(object sender, MouseEventArgs e) 
     { 
      if (Drawshape == 5) 
      { 
       if (p1.X == 0) 
       { 
        p1.X = e.X; 
        p1.Y = e.Y; 
       } 
       else 
       { 
        p2.X = e.X; 
        p2.Y = e.Y; 

        p1List.Add(p1); 
        p2List.Add(p2); 

        pictureBox1.Invalidate(); 
        p1.X = 0; 
       } 
      } 
     } 

     private void pictureBox1_ParentChanged(object sender, EventArgs e) 
     { 

     } 

     private void pictureBox1_Paint(object sender, PaintEventArgs e) 
     { 
      Graphics G = Graphics.FromImage(pictureBox1.Image); 
      if (Drawshape == 5) 
      { 
       using (var p = new Pen(Color.Blue, 4)) 
       { 
        for (int x = 0; x < p1List.Count; x++) 
        { 
         G.DrawLine(p, p1List[x], p2List[x]); 
        } 
       } 
      } 

     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 

     } 

     private void pictureBox1_MouseMove(object sender, MouseEventArgs e) 
     { 
      pictureBox1.Invalidate(); 
     } 

     private void Save_Click(object sender, EventArgs e) 
     { 



     } 
    } 
} 

Je ne sais pas comment sauver ces lignes et aussi les ouvrir à nouveau à un moment plus tard, lorsque l'utilisateur veut. Je l'ai mis en ouvert et enregistrer des fichiers, mais je ne sais pas comment les faire faire le travail que je veux qu'ils fassent. S'il vous plaît aidez.

Merci

Répondre

2

Si vous voulez enregistrer l'image qui est affichée dans la zone d'image, avec toutes les lignes qui ont pu être dessinées dessus pendant l'exécution, vous pouvez utiliser le Control.DrawToBitmap method.

Je ne peux pas dire avec certitude si vous demandez également comment utiliser un SaveFileDialog pour déterminer où l'utilisateur veut enregistrer le fichier ou si vous avez déjà compris cette partie, mais c'est très simple.

Voici un exemple de solution complète. Tout d'abord, l'utilisateur est invité par une boîte de dialogue de sauvegarde (intitulée "Enregistrer l'image" et filtrant les images bitmap (* .bmp) par défaut). Si elles cliquent sur OK, l'image affichée dans la zone d'image est dessinée à une image temporaire, et cette image temporaire est enregistrée à l'emplacement qu'ils ont spécifié. Si elles cliquent sur Annuler, le fichier n'est pas enregistré et la méthode se ferme simplement.

private void Save_Click(object sender, EventArgs e) 
{ 
    //Show a save dialog to allow the user to specify where to save the image file 
    using (SaveFileDialog dlgSave = new SaveFileDialog()) 
    { 
     dlgSave.Title = "Save Image"; 
     dlgSave.Filter = "Bitmap Images (*.bmp)|*.bmp|All Files (*.*)|*.*"; 
     if (dlgSave.ShowDialog(this) == DialogResult.OK) 
     { 
      //If user clicked OK, then save the image into the specified file 
      using (Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height)) 
      { 
       picturebox1.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height)); 
       bmp.Save(dlgSave.FileName); 
      } 
     } 
    } 
} 
0

Vous ne savez pas ce que vous voulez ... voulez-vous enregistrer l'image résultante, ou la liste des points?

Si vous souhaitez enregistrer l'image, utilisez simplement pictureBox1.Image.Save(fileName).

Si vous souhaitez enregistrer la liste des points, vous pouvez utiliser sérialisation (il devrait fonctionner avec binaire ou sérialisation XML)

Questions connexes