Перейти к содержанию
    

C# Как сохранить результат рисования в pictureBox в .bmp или .jpg

Доброго времени!

Осваиваю C#.

Поставил себе задачу, научиться рисовать в элементе pictureBox и сохранять результат в виде файла (картинки).

Рисование освоил.

А вот сохранение не получается, выпадает ошибка.

Суть кода: По нажатию на единственную кнопку нарисовать градиент и предложить место для сохранения файла.
Вот обработчик кнопки:
[CSHARP]

private void button1_Click(object sender, EventArgs e)
{
            // настройка pictureBox1 на рисование
            Graphics g = pictureBox1.CreateGraphics();
            //  Pen pen = new Pen(Color.Black); // настройка цвета линии для дальнейшего рисования

             for (int counter = 0; counter <= 255; counter++)
            {
                Pen pen = new Pen(Color.FromArgb(counter, (255-counter), counter, counter));
                g.DrawLine(pen, counter, 0, counter, 320); // рисование
            }


            // СОХРАНЕНИЕ
            //Открытие диалогового окна
            SaveFileDialog sfd = new SaveFileDialog();
            sfd.Title = "Сохранить как...";
            sfd.OverwritePrompt = true;
            sfd.CheckPathExists = true;
            sfd.Filter = "Image Files(*.BMP)|*.BMP|Image Files(*.JPG)|*.JPG|Image Files(*.BMP)|*.BMP|All files(*.*)|*.*";
            sfd.ShowHelp = true;

            if (sfd.ShowDialog() == DialogResult.OK) // нажатие кнопки ОК
            {
                try
                {
                    //pictureBox1.Image = new Bitmap(pictureBox1.Image);

                    //Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
                    //pictureBox1.DrawToBitmap(bmp, pictureBox1.ClientRectangle);
                    //bmp.Save("D:\\test1.bmp");

                    pictureBox1.Image.Save(sfd.FileName);
                }
                catch
                {
                    MessageBox.Show("Невозможно сохранить изображение", "Ошибка",
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
}

[/CSHARP]

А вот скрин с ошибкой

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вам сначала нужно создать объект файла изображения.

Если нужно в растровый файл сохранить:

Graphics mg; // объект типа Graphics
Bitmap bmpfile = new Bitmap(this.Size.Width, this.Size.Height); // объект типа Bitmap
bmpfile.SetResolution(dpi, dpi); // опционально задать разрешение тчк/дюйм

mg = Graphics.FromImage(bmpfile); 
pictureBox1.Redraw(mg); // перерисует всё в экземпляре указанного объекта Graphics
// сохр. файл
bmpfile.Save(filename, ImageFormat.Png); // filename - путь к файлу
// вызываем явно деструкторы, можно обернуть все в using, чтб красивее было
mg.Dispose();
bmpfile.Dispose();

 

если нужно в векторный (EMF):

Graphics g, mg;
g = this.CreateGraphics();
IntPtr hdc = g.GetHdc(); // получение контекста 
Metafile mfile = new Metafile(filename, hdc); // объект для сохранения в EMF/WMF
mg = Graphics.FromImage(mfile); 
pictureBox1.Redraw(mg); // перерисовываем в mg
// убираем всё в правильной последовательности
mg.Dispose();
mfile.Dispose();
g.ReleaseHdc();            
g.Dispose();

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19.01.2022 в 16:32, alexunder сказал:

Вам сначала нужно создать объект файла изображения.

Если нужно в растровый файл сохранить:


Graphics mg; // объект типа Graphics
Bitmap bmpfile = new Bitmap(this.Size.Width, this.Size.Height); // объект типа Bitmap
bmpfile.SetResolution(dpi, dpi); // опционально задать разрешение тчк/дюйм

mg = Graphics.FromImage(bmpfile); 
pictureBox1.Redraw(mg); // перерисует всё в экземпляре указанного объекта Graphics
// сохр. файл
bmpfile.Save(filename, ImageFormat.Png); // filename - путь к файлу
// вызываем явно деструкторы, можно обернуть все в using, чтб красивее было
mg.Dispose();
bmpfile.Dispose();

 

если нужно в векторный (EMF):


Graphics g, mg;
g = this.CreateGraphics();
IntPtr hdc = g.GetHdc(); // получение контекста 
Metafile mfile = new Metafile(filename, hdc); // объект для сохранения в EMF/WMF
mg = Graphics.FromImage(mfile); 
pictureBox1.Redraw(mg); // перерисовываем в mg
// убираем всё в правильной последовательности
mg.Dispose();
mfile.Dispose();
g.ReleaseHdc();            
g.Dispose();

 

pictureBox1.Redraw(mg); 
А что это за метод Redraw ? У меня пишет, что pictureBox не содержит метод Redraw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, nickson.b.k said:

pictureBox не содержит метод Redraw

Совершенно так. В этом методе вам и следует делать рисование на переданном объекте типа Graphics (mg).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...