Как сохранить изображение с PictureBox
Хочу сохранить изображение с PictureBox, но постоянно сохраняется только чёрное изображение или вылетает ошибка. Подскажите в чём проблема.
Color CurrentColor = Color.Green; bool isPresed = false; Point CurrentPoint; Point PrePoint; Graphics g; public Form1() < InitializeComponent(); g = pictureBox1.CreateGraphics(); >private void button1_Click(object sender, EventArgs e) < pictureBox1.Save("test.jpg", ImageFormat.Jpeg); >private void pictureBox1_MouseDown(object sender, MouseEventArgs e) < isPresed = true; CurrentPoint = e.Location; >private void pictureBox1_MouseMove(object sender, MouseEventArgs e) < if (isPresed) < PrePoint = CurrentPoint; CurrentPoint = e.Location; for_paint(); >> private void pictureBox1_MouseUp(object sender, MouseEventArgs e) < isPresed = false; >private void for_paint()
Отслеживать
задан 8 мая 2017 в 9:08
Юлий Ведькал Юлий Ведькал
109 1 1 серебряный знак 6 6 бронзовых знаков
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Приведённый код рисует на графиксе пикчабокса. Естественно, Image остаётся пустым.
Нужно создать графикс у Image и использовать его. Предварительно, нужно создать картинку нужного размера.
// эту строку удаляем //g = pictureBox1.CreateGraphics(); var bitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height); pictureBox1.Image = bitmap; g = Graphics.FromImage(bitmap);
Ещё нужно обновлять PictureBox , чтобы внесённые в Image изменения отобразились:
private void for_paint() < Pen p = new Pen(CurrentColor); g.DrawLine(p, PrePoint, CurrentPoint); pictureBox1.Invalidate(); //
Сохранить картинку из pictureBox в папку
Всем доброго времени суток! Задача такая: нужно сохранить картинку из pictureBox в папку на диске. Картинка каждый раз меняется при нажатии на кнопку и нужно сохранить ту картинку которая в данный момент находится в pictureBox. Путь в папку где должны будут хранится картинки должен указываться только один раз, а потом при нажатии на кнопку по умолчанию сохранять картинку из pictureBox в указанную папку. То есть одна кнопка отвечает за указывание пути где должны будут лежать все картинки, а другая сохранять текущую картинку из pictureBox.
Подскажите пожалуйста как можно такое реализовать. Заранее спасибо!
Лучшие ответы ( 3 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Сохранить картинку из picturebox
Люди, битый час сижу все перепробовал вот код: Image to_save = pictureBox2.Image; .
Как создать Word файл и сохранить в него картинку из PictureBox и текст из TextBoxов?
Подскажите как создать Word файл и сохранить в него картинку из Picturebox и текст из textboxов?
Не сохраняет картинку из pictureBox
private void btn_Click(object sender, EventArgs e) < .
33 / 31 / 20
Регистрация: 17.03.2015
Сообщений: 175

Сообщение было отмечено lordk как решение
Решение
Сообщение от lordk 
То есть одна кнопка отвечает за указывание пути где должны будут лежать все картинки
Используй FolderBrowserDialog()
Пример:
1 2 3 4 5 6 7 8
using(var path_dial = new FolderBrowserDialog()) { if(path_dial.ShowDialog() == System.Windows.Forms.DialogResult.OK) { // Сохранение выбранного пути; string path = path_dial.SelectedPath; } }
А вот так вы можете сохранить изображение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
if (pictureBox1.Image != null) //если в pictureBox есть изображение { try { // path - путь, который был выбран в FolderBrowserDialog() //image_name - имя для сохранения, можете сделать отдельный TextBox где будете сами его прописывать. pictureBox1.Image.Save(path + image_name +".jpeg", System.Drawing.Imaging.ImageFormat.Jpeg); } catch { MessageBox.Show("Невозможно сохранить изображение", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
Регистрация: 19.04.2015
Сообщений: 30
Спасибо, все работает!
Добавлено через 31 минуту
Возникла одна проблема, переменная path вроде как объявляется выше
Сообщение от Dragon7788 
pictureBox1.Image.Save(path + image_name +".jpeg", System.Drawing.Imaging.ImageFormat.Jpeg);
но вот в этой строчке ругается на path и image_name что они не объявлены. Пробовал объявить глобально но это проблеме не помогло. Подскажите пожалуйста как это исправить?
33 / 31 / 20
Регистрация: 17.03.2015
Сообщений: 175
string path = ""
После, когда выбираешь путь к папке, получи результат вот так:
path = pathToForlder.SelectedPath + "\";
pictureBox1.Image.Save(path + System.Guid.NewGuid() + ".jpeg", System.Drawing.Imaging.ImageFormat.Jpeg);
Имя картинки можно задать либо System.Guid.NewGuid() (Генерирует случайное имя), или же создай TextBox и задавай имя сам.
Регистрация: 19.04.2015
Сообщений: 30
Посмотрите в что я делаю не так. Все работает все замечательно, но при нажатии на кнопку Сохранить(Button2) ничего не происходит, в чем ошибка?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; using System.Drawing.Imaging; namespace Класификатор { public partial class Form1 : Form { string[] _fileNames; int _iFile = 0; string path = ""; public Form1() { InitializeComponent(); if (!this.DesignMode) { _fileNames = Directory.GetFiles("t:\\1", "*.jpg"); using (var path_dial = new FolderBrowserDialog()) { if (path_dial.ShowDialog() == System.Windows.Forms.DialogResult.OK) { // Сохранение выбранного пути; string path = path_dial.SelectedPath; } } } } public ImageFormat FormatOfImage { get; private set; } private void button1_Click(object sender, EventArgs e) { pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; if (_fileNames.Length > 0) { if (this.pictureBox1.Image != null) this.pictureBox1.Image.Dispose(); try { this.pictureBox1.Image = Image.FromFile(_fileNames[_iFile]); _iFile++; if (_iFile > _fileNames.Length - 1) _iFile = 0; } catch { this.pictureBox1.Image = null; } } } private void button2_Click(object sender, EventArgs e) { using (var path_dial = new FolderBrowserDialog()) { if (path_dial.ShowDialog() == System.Windows.Forms.DialogResult.OK) { // Сохранение выбранного пути; string path = path_dial.SelectedPath; } } if (pictureBox1.Image != null) //если в pictureBox есть изображение { try { pictureBox1.Image.Save(path + System.Guid.NewGuid() + ".jpeg", System.Drawing.Imaging.ImageFormat.Jpeg); } catch { MessageBox.Show("Невозможно сохранить изображение", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } //Bitmap savedBit = new Bitmap(pictureBox1.Width, pictureBox1.Height); //pictureBox1.DrawToBitmap(savedBit, pictureBox1.ClientRectangle); //savedBit.Save(@"T:\123.bmp"); //--------------------------------------------------------------------------------------------------------------- //Bitmap savedBit = new Bitmap(pictureBox1.Width, pictureBox1.Height); //pictureBox1.DrawToBitmap(savedBit, pictureBox1.ClientRectangle); //SaveFileDialog sfd = new SaveFileDialog(); //sfd.DefaultExt = "bmp"; //sfd.Filter = "Image files (*.bmp)|*.bmp|All files (*.*)|*.*"; //if (sfd.ShowDialog() == DialogResult.OK) // savedBit.Save(sfd.FileName, ImageFormat.Bmp); } } }
Ошибка при сохранении картинки в picturebox c# winforms

Здравствуйте, пытаюсь реализовать загрузку картинки с ее последующем сохранением после перезапуска программы, но возникает непонятная для меня ошибка, помогите разобраться, что делаю не так.
На скрине выложу код и здесь тоже:
OpenFileDialog image = new OpenFileDialog();
if (image.ShowDialog() == DialogResult.OK)
pictureBox1.Load(image.FileName);
pictureBox1.Image.Save(image.FileName);
>
Дополнен 3 года назад
Ошибка возникает после выбора картинки в диалоговом окне
Дополнен 3 года назад
Вообщем Save так и не заработал у меня но я сделал каким-то своим странным способом, мб пригодится кому -
на событии дабл клик пикчер бокс был следующий код:
Directory.CreateDirectory(@"C:\Users\" + Environment.UserName.ToString() + @"\AppData\Local\Temp\Imagexx");//создаем папку во временном хранилище
OpenFileDialog image = new OpenFileDialog();
if (image.ShowDialog() == DialogResult.OK)
pictureBox1.Load(image.FileName);//загружаем ее в пикчер бокс
pictureBox1.Image.Save(@"C:\Users\" + Environment.UserName.ToString() + @"\AppData\Local\Temp\Imagexx\" + Path.GetFileName(image.FileName));//сохраняем в созданную папку
на форме в Initialize component в picturebox выбираем последнию созданую папку по дате и все будет работать..
//DateTime dt = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
//FileSystemInfo[] fileSystemInfo = new DirectoryInfo(@"C:\Users\" + Environment.UserName.ToString() + @"\AppData\Local\Temp\Imagexx").GetFileSystemInfos();
//foreach (FileSystemInfo fileSI in fileSystemInfo)
// // if (fileSI.Extension == ".bmp" | fileSI.Extension == ".png" | fileSI.Extension == ".jpg" | fileSI.Extension == ".jpeg")
// // if (dt < Convert.ToDateTime(fileSI.CreationTime))
// // dt = Convert.ToDateTime(fileSI.CreationTime);
// pictureBox1.Load(@"C:\Users\" + Environment.UserName.ToString() + @"\AppData\Local\Temp\Imagexx\\" + fileSI.Name);
// >
// >
Лучший ответ
Посмотри как это делается
darkvenger34Профи (994) 3 года назад
Как сохранить рисунок из PictureBox?
Как сохранить все что находится в PictureBox, а не только Image (если вставить картинку, то она сохраняется нормально)?
Функция для сохранения:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
private void saveToolStripMenuItem_Click(object sender, EventArgs e) SaveFileDialog savedialog = new SaveFileDialog(); savedialog.Title = "Сохранить картинку как . "; savedialog.Filter = "GIF File(*.gif) } }
Функция для рисования:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
private void pictureBox1_MouseMove(object sender, MouseEventArgs e2) { if (e2.Button == MouseButtons.Left) { Graphics g1 = pictureBox1.CreateGraphics(); int radius = sizeOfPan; int centerX = e2.X; int centerY = e2.Y; switch (comboBoxIndex) { case 0: g1.FillEllipse(new SolidBrush(colorOfBrush), centerX - radius, centerY - radius, radius + radius, radius + radius); break; case 1: g1.FillRectangle(new SolidBrush(colorOfBrush), centerX - radius, centerY - radius, radius + radius, radius + radius); break; case 2: Point[] pnt = new Point[3]; pnt[0].X = centerX; pnt[0].Y = centerY-(int)(sizeOfPan/2); pnt[1].X = centerX - (int)(sizeOfPan / 2); pnt[1].Y = centerY + (int)(sizeOfPan / 2); pnt[2].X = centerX + (int)(sizeOfPan / 2); pnt[2].Y = centerY + (int)(sizeOfPan / 2); g1.FillPolygon(new SolidBrush(colorOfBrush), pnt); break; case 3: if ((lastX == 0) && (lastY == 0)) { lastX = e2.X; lastY = e2.Y; } g1.DrawLine(new Pen(colorOfBrush,sizeOfPan), new Point (lastX, lastY), new Point(e2.X, e2.Y)); lastX = e2.X; lastY = e2.Y; break; default: break; } g1.Dispose(); } else { mouseX = 0; mouseY = 0; } }
Вот я хочу сохранить: