Как сохранить изображение из picturebox c
Перейти к содержимому

Как сохранить изображение из picturebox c

  • автор:

Как сохранить изображение с 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; } }

Вот я хочу сохранить:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *