Сохранить пользовательскую растровую графику в C # - PullRequest
0 голосов
/ 17 ноября 2010

Я создал программу, которая позволяет пользователям рисовать линии на изображении в виде картинки, но теперь нужно сохранить эти линии, чтобы открыть их позже. Это мой текущий код для рисования линий:

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



        } 
    }
}

Я не знаю, как сохранить эти строки, а также открыть их позже, когда пользователь захочет. Я вставил открытые и сохраненные файловые диалоги, но не уверен, как заставить их делать то, что я хочу, чтобы они делали. Пожалуйста, помогите.

Спасибо

Ответы [ 3 ]

2 голосов
/ 17 ноября 2010

Если вы хотите сохранить изображение, отображаемое в графическом окне, с любыми линиями, которые могли быть нарисованы поверх него во время выполнения, вы можете использовать метод Control.DrawToBitmap .

Не могу точно сказать, спрашиваете ли вы, как использовать 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 голосов
/ 17 ноября 2010

Непонятно, что вы хотите ... хотите сохранить полученное изображение или список точек?

Если вы хотите сохранить изображение, просто используйте pictureBox1.Image.Save(fileName).

Если вы хотите сохранить список точек, вы можете использовать сериализацию (она должна работать с двоичной или XML-сериализацией)

0 голосов
/ 17 ноября 2010
...