2010-11-17 79 views
0

我已经制作了一个程序,允许用户在一个picturebox图像上绘制线条,但现在需要保存这些行以便在以后打开。这是我画的线电流代码:保存用户在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) 
     { 



     } 
    } 
} 

我不知道如何保存这些线条,并在当用户想要稍后再次打开。我已经公开并保存了filedialogs,但不知道如何让他们做我希望他们做的工作。请帮忙。

感谢

回答

2

如果你想保存显示在图片框的图像,完成在运行期间可能已在其上绘制的任何行,可以使用Control.DrawToBitmap method

我无法确定您是否也在问如何使用SaveFileDialog来确定用户想要保存文件的位置,或者您已经知道了该部分,但它非常简单。

下面是一个完整解决方案的例子。首先,用户通过保存对话框(标题为“保存图像”并默认过滤到位图图像(* .bmp))提示用户。如果他们单击确定,图片框中显示的图像被绘制到一个临时位图,并且该临时位图被保存到它们指定的位置。如果他们单击取消,该文件不会被保存,并且该方法会立即退出。

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

不清楚你想要什么...你想保存结果图像或点的列表?

如果你想保存图像,只需使用pictureBox1.Image.Save(fileName)

如果你想节省点列表,你可以使用序列化(它应该工作二进制或XML序列化)