简体   繁体   English

在C#中保存用户绘制的位图图形

[英]Save User Drawn Bitmap Graphics in c#

I have made a program that allows users to draw lines onto a picturebox image but now need to save these lines to be opened at a later date. 我制作了一个程序,允许用户在图片框图像上绘制线条,但现在需要保存这些线条以便以后打开。 This is my current code for drawing the lines: 这是我当前绘制线条的代码:

 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)
        {



        } 
    }
}

I don't know how to save these lines and also open them again at a later time when the user wants to. 我不知道如何保存这些行,并且在用户想要的稍后时间再次打开它们。 I have put in open and save filedialogs but not sure how to make them do the job i want them to do. 我已经开放并保存了文件,但不知道如何让他们完成我希望他们做的工作。 Please Help. 请帮忙。

Thanks 谢谢

If you want to save the image that is displayed in the picture box, complete with any lines that may have been drawn on top of it during run-time, you can use the Control.DrawToBitmap method . 如果要保存图片框中显示的图像,以及在运行时可能已在其上绘制的任何行,可以使用Control.DrawToBitmap方法

I can't tell for sure if you're also asking how to use a SaveFileDialog to determine where the user wants to save the file or if you've already got that part figured out, but it's very simple. 我无法确定你是否也在询问如何使用SaveFileDialog来确定用户想要保存文件的位置,或者你是否已经找到了这个部分,但这很简单。

Here's an example of a complete solution. 这是一个完整解决方案的示例。 First, the user is prompted by a save dialog (entitled "Save Image" and filtering to bitmap images (*.bmp) by default). 首先,通过保存对话框提示用户(标题为“保存图像”,默认情况下过滤为位图图像(* .bmp))。 If they click OK, the image displayed in the picture box is drawn to a temporary bitmap, and that temporary bitmap is saved to the location they specified. 如果他们单击“确定”,则图片框中显示的图像将绘制到一个临时位图,并且该临时位图将保存到他们指定的位置。 If they click Cancel, the file is not saved and the method simply exits. 如果他们单击“取消”,则不会保存文件,并且该方法仅退出。

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

It's not clear what you want... do you want to save the resulting image, or the list of points ? 目前尚不清楚你想要什么...你想保存结果图像或点列表吗?

If you want to save the image, just use pictureBox1.Image.Save(fileName) . 如果要保存图像,只需使用pictureBox1.Image.Save(fileName)

If you want to save the list of points, you could use serialization (it should work with either binary or XML serialization) 如果要保存点列表,可以使用序列化(它应该与二进制或XML序列化一起使用)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM