Перейти к содержимому

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

Image. Save Метод

Пространство имен: System.Drawing Сборка: System.Drawing.Common.dll Сборка: System.Drawing.dll Пакет: System.Drawing.Common v6.0.0 Пакет: System.Drawing.Common v7.0.0 Пакет: System.Drawing.Common v8.0.0

Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

Сохраняет данное изображение в указанный поток в указанном формате.

Перегрузки

Сохраняет объект Image в указанный файл с заданным кодировщиком и определенными параметрами кодировщика изображения.

Сохраняет данное изображение в указанный поток с заданным кодировщиком и определенными параметрами кодировщика изображения.

Сохраняет объект Image в указанный файл в указанном формате.

Сохраняет данное изображение в указанный поток в указанном формате.

Сохраняет объект Image в указанный файл или поток.

Save(String, ImageCodecInfo, EncoderParameters)

Сохраняет объект Image в указанный файл с заданным кодировщиком и определенными параметрами кодировщика изображения.

public: void Save(System::String ^ filename, System::Drawing::Imaging::ImageCodecInfo ^ encoder, System::Drawing::Imaging::EncoderParameters ^ encoderParams);
public void Save (string filename, System.Drawing.Imaging.ImageCodecInfo encoder, System.Drawing.Imaging.EncoderParameters encoderParams);
public void Save (string filename, System.Drawing.Imaging.ImageCodecInfo encoder, System.Drawing.Imaging.EncoderParameters? encoderParams);
member this.Save : string * System.Drawing.Imaging.ImageCodecInfo * System.Drawing.Imaging.EncoderParameters -> unit
Public Sub Save (filename As String, encoder As ImageCodecInfo, encoderParams As EncoderParameters)
Параметры

Строка, содержащая имя файла, в который нужно сохранить объект Image.

encoderParams EncoderParameters

Параметры EncoderParameters, предназначенные для данного объекта Image.

Исключения

Параметр filename или encoder имеет значение null .

Изображение сохранено в неправильном формате.

Изображение сохранено в тот же файл, из которого оно было создано.

Примеры

В следующем примере создается Bitmap объект из BMP-файла. Код сохраняет растровое изображение в три JPEG-файла с разным уровнем качества.

#using using namespace System; using namespace System::Drawing; using namespace System::Drawing::Imaging; static ImageCodecInfo^ GetEncoderInfo( ImageFormat^ format ); int main() < Bitmap^ myBitmap; ImageCodecInfo^ myImageCodecInfo; Encoder^ myEncoder; EncoderParameter^ myEncoderParameter; EncoderParameters^ myEncoderParameters; // Create a Bitmap object based on a BMP file. myBitmap = gcnew Bitmap( "Shapes.bmp" ); // Get an ImageCodecInfo object that represents the JPEG codec. myImageCodecInfo = GetEncoderInfo( ImageFormat->Jpeg ); // Create an Encoder object based on the GUID // for the Quality parameter category. myEncoder = Encoder::Quality; // Create an EncoderParameters object. // An EncoderParameters object has an array of EncoderParameter // objects. In this case, there is only one // EncoderParameter object in the array. myEncoderParameters = gcnew EncoderParameters( 1 ); // Save the bitmap as a JPEG file with quality level 25. myEncoderParameter = gcnew EncoderParameter( myEncoder,__int64(25) ); myEncoderParameters->Param[ 0 ] = myEncoderParameter; myBitmap->Save( "Shapes025.jpg", myImageCodecInfo, myEncoderParameters ); // Save the bitmap as a JPEG file with quality level 50. myEncoderParameter = gcnew EncoderParameter( myEncoder,__int64(50) ); myEncoderParameters->Param[ 0 ] = myEncoderParameter; myBitmap->Save( "Shapes050.jpg", myImageCodecInfo, myEncoderParameters ); // Save the bitmap as a JPEG file with quality level 75. myEncoderParameter = gcnew EncoderParameter( myEncoder,__int64(75) ); myEncoderParameters->Param[ 0 ] = myEncoderParameter; myBitmap->Save( "Shapes075.jpg", myImageCodecInfo, myEncoderParameters ); > static ImageCodecInfo^ GetEncoderInfo( ImageFormat^ format ) < int j; array^encoders; encoders = ImageCodecInfo::GetImageEncoders(); for ( j = 0; j < encoders->Length; ++j ) < if ( encoders[ j ]->FormatID == format->Guid) return encoders[ j ]; > return nullptr; > 
using System; using System.Drawing; using System.Drawing.Imaging; class Example_SetJPEGQuality < public static void Main() < Bitmap myBitmap; ImageCodecInfo myImageCodecInfo; Encoder myEncoder; EncoderParameter myEncoderParameter; EncoderParameters myEncoderParameters; // Create a Bitmap object based on a BMP file. myBitmap = new Bitmap("Shapes.bmp"); // Get an ImageCodecInfo object that represents the JPEG codec. myImageCodecInfo = GetEncoderInfo("image/jpeg"); // Create an Encoder object based on the GUID // for the Quality parameter category. myEncoder = Encoder.Quality; // Create an EncoderParameters object. // An EncoderParameters object has an array of EncoderParameter // objects. In this case, there is only one // EncoderParameter object in the array. myEncoderParameters = new EncoderParameters(1); // Save the bitmap as a JPEG file with quality level 25. myEncoderParameter = new EncoderParameter(myEncoder, 25L); myEncoderParameters.Param[0] = myEncoderParameter; myBitmap.Save("Shapes025.jpg", myImageCodecInfo, myEncoderParameters); // Save the bitmap as a JPEG file with quality level 50. myEncoderParameter = new EncoderParameter(myEncoder, 50L); myEncoderParameters.Param[0] = myEncoderParameter; myBitmap.Save("Shapes050.jpg", myImageCodecInfo, myEncoderParameters); // Save the bitmap as a JPEG file with quality level 75. myEncoderParameter = new EncoderParameter(myEncoder, 75L); myEncoderParameters.Param[0] = myEncoderParameter; myBitmap.Save("Shapes075.jpg", myImageCodecInfo, myEncoderParameters); >private static ImageCodecInfo GetEncoderInfo(String mimeType) < int j; ImageCodecInfo[] encoders; encoders = ImageCodecInfo.GetImageEncoders(); for(j = 0; j < encoders.Length; ++j) < if(encoders[j].MimeType == mimeType) return encoders[j]; >return null; > > 
Imports System.Drawing Imports System.Drawing.Imaging Class Example_SetJPEGQuality Public Shared Sub Main() Dim myBitmap As Bitmap Dim myImageCodecInfo As ImageCodecInfo Dim myEncoder As Encoder Dim myEncoderParameter As EncoderParameter Dim myEncoderParameters As EncoderParameters ' Create a Bitmap object based on a BMP file. myBitmap = New Bitmap("Shapes.bmp") ' Get an ImageCodecInfo object that represents the JPEG codec. myImageCodecInfo = GetEncoderInfo(ImageFormat.Jpeg) ' Create an Encoder object based on the GUID ' for the Quality parameter category. myEncoder = Encoder.Quality ' Create an EncoderParameters object. ' An EncoderParameters object has an array of EncoderParameter ' objects. In this case, there is only one ' EncoderParameter object in the array. myEncoderParameters = New EncoderParameters(1) ' Save the bitmap as a JPEG file with quality level 25. myEncoderParameter = New EncoderParameter(myEncoder, CType(25L, Int32)) myEncoderParameters.Param(0) = myEncoderParameter myBitmap.Save("Shapes025.jpg", myImageCodecInfo, myEncoderParameters) ' Save the bitmap as a JPEG file with quality level 50. myEncoderParameter = New EncoderParameter(myEncoder, CType(50L, Int32)) myEncoderParameters.Param(0) = myEncoderParameter myBitmap.Save("Shapes050.jpg", myImageCodecInfo, myEncoderParameters) ' Save the bitmap as a JPEG file with quality level 75. myEncoderParameter = New EncoderParameter(myEncoder, CType(75L, Int32)) myEncoderParameters.Param(0) = myEncoderParameter myBitmap.Save("Shapes075.jpg", myImageCodecInfo, myEncoderParameters) End Sub Private Shared Function GetEncoderInfo(ByVal format As ImageFormat) As ImageCodecInfo Dim j As Integer Dim encoders() As ImageCodecInfo encoders = ImageCodecInfo.GetImageEncoders() j = 0 While j < encoders.Length If encoders(j).FormatID = format.Guid Then Return encoders(j) End If j += 1 End While Return Nothing End Function 'GetEncoderInfo End Class 

Комментарии

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

См. также раздел

Как задать относительный путь для сохранения изображения? C#

Нужно сохранить получившееся в picturebox изображение по строго определённому пути (через openFileDialog нельзя) Часть кода:

if (pictureBox1.Image != null) //если в pictureBox есть изображение < try < pictureBox1.Image.Save(@"codes\Qr", System.Drawing.Imaging.ImageFormat.Jpeg); >catch < MessageBox.Show("Невозможно сохранить изображение", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); >> 

Отслеживать
задан 23 мая 2021 в 16:28
7 1 1 бронзовый знак
Относительный путь относительно чего? Что за приложение, WinForms?
23 мая 2021 в 16:56
23 мая 2021 в 17:25

0

Сортировка: Сброс на вариант по умолчанию

Знаете кого-то, кто может ответить? Поделитесь ссылкой на этот вопрос по почте, через Твиттер или Facebook.

  • c#
  • picturebox
  • save
    Важное на Мете
Связанные
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.3.2953

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

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

Профиль
Группа: Участник
Сообщений: 8
Регистрация: 30.11.2006

Репутация: нет
Всего: нет

пытаюсь сохранить рисунок из picturebox в файл, а не получается. Вот как я это делаю:

Код
Public Sub SaveToFile(ByVal sfd As SaveFileDialog, ByVal pb As PictureBox)
sfd.Title = "Save to file"
sfd.Filter = "JPEG Images (*.jpg,*.jpeg)|*.jpg;*.jpeg|Gif Images (*.gif)|*.gif|Bitmaps (*.bmp)|*.bmp"
sfd.FilterIndex = 1
sfd.OverwritePrompt = True
If sfd.ShowDialog() = DialogResult.OK Then
Dim picName As String
picName = sfd.FileName
If picName.EndsWith("jpg") Or picName.EndsWith("jpeg") Then
pb.Image.Save(picName, System.Drawing.Imaging.ImageFormat.Jpeg)
End If
If picName.EndsWith("gif") Then
pb.Image.Save(picName, System.Drawing.Imaging.ImageFormat.Gif)
End If
If picName.EndsWith("bmp") Then
pb.Image.Save(picName, System.Drawing.Imaging.ImageFormat.Bmp)
End If
End If
End Sub

при сохранении ругается на стоки .Image.Save(picName, System.Drawing.Imaging.ImageFormat.Bmp)
В чем проблема.

Это сообщение отредактировал(а) Exception - 1.12.2006, 20:17

Дата 30.11.2006, 15:58 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: нет
Всего: 110

перенёс из Алгоритмов

Дата 30.11.2006, 18:50 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

Репутация: нет
Всего: 6

Интуиция подсказывает, что это VB.NET.

Какая она у меня все-таки изумительная.

Это сообщение отредактировал(а) Тутанхамец - 30.11.2006, 18:51

Дата 1.12.2006, 11:18 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник
Сообщений: 8
Регистрация: 30.11.2006

Репутация: нет
Всего: нет

Так что нужно сделать?

Дата 1.12.2006, 11:26 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник
Сообщений: 937
Регистрация: 3.12.2004
Где: Санкт-Петербург/П рага

Репутация: 1
Всего: 17

так ты под .NET пишешь или тебя интересует способ сохранения средствами VB6.

Дата 1.12.2006, 13:34 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: нет
Всего: 110

моя ошибка. надо было в VB.Net
(не обратил внимания на System.Drawing.

Дата 1.12.2006, 15:53 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник
Сообщений: 8
Регистрация: 30.11.2006

Репутация: нет
Всего: нет

Imports System.Drawing
Imports System.Drawing.Printing
Imports System.IO
Imports System.Drawing.Imaging

все равно не хочет

Дата 1.12.2006, 16:27 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник
Сообщений: 937
Регистрация: 3.12.2004
Где: Санкт-Петербург/П рага

Репутация: 1
Всего: 17

у меня сохранил по этой строке:
PictureBox1.Image.Save("C:\1.bmp", System.Drawing.Imaging.ImageFormat.Bmp)

ты бы конкретней написал.. что что именно пишет в ошибке.

Дата 1.12.2006, 16:50 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: нет
Всего: 99

Перенес из VB6.

Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие

Дата 1.12.2006, 17:25 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник
Сообщений: 8
Регистрация: 30.11.2006

Репутация: нет
Всего: нет

вот что он пишет:

An unhandled exception of type 'System.NullReferenceException' occurred in Barcode.exe

Additional information: Object reference not set to an instance of an object.

Дата 1.12.2006, 17:37 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 5
Всего: 149

Что я могу сказать. Код, вроде, нормальный.
Кажется мне, что у тебя нет картинки в PictureBox
Т.е. pb.Image = Nothing
Почитай-ка Как распечатать содержимое PicturBox

Дата 1.12.2006, 17:41 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник
Сообщений: 937
Регистрация: 3.12.2004
Где: Санкт-Петербург/П рага

Репутация: 1
Всего: 17

Цитата(sergexp @ 1.12.2006, 17:25 )
вот что он пишет:

An unhandled exception of type 'System.NullReferenceException' occurred in Barcode.exe

нутк видимо ты пытаешься сохранить null.
попробуй отладить пошагово и посмотри, есть ли реально картинка в твоем PictureBox -
свойство Image.

Дата 5.12.2006, 13:28 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник
Сообщений: 296
Регистрация: 19.8.2006

Репутация: 5
Всего: 8

Цитата(Wanderer2019 @ 1.12.2006, 17:41 )
нутк видимо ты пытаешься сохранить null.
попробуй отладить пошагово и посмотри, есть ли реально картинка в твоем PictureBox -
свойство Image.

А чо смотреть то, вот попробуй код:

Код
Public Sub SaveToFile(ByVal sfd As SaveFileDialog, ByVal pb As PictureBox)
If pb.Image Is Nothing Then Return ' Если нету картинки ф-ция завершается.
sfd.Title = "Save to file"
sfd.Filter = "JPEG Images (*.jpg,*.jpeg)|*.jpg;*.jpeg|Gif Images (*.gif)|*.gif|Bitmaps (*.bmp)|*.bmp"
sfd.FilterIndex = 1
sfd.OverwritePrompt = True
If sfd.ShowDialog() = DialogResult.OK Then
Dim picName As String
picName = sfd.FileName
If picName.EndsWith("jpg") Or picName.EndsWith("jpeg") Then
pb.Image.Save(picName, System.Drawing.Imaging.ImageFormat.Jpeg)
End If
If picName.EndsWith("gif") Then
pb.Image.Save(picName, System.Drawing.Imaging.ImageFormat.Gif)
End If
If picName.EndsWith("bmp") Then
pb.Image.Save(picName, System.Drawing.Imaging.ImageFormat.Bmp)
End If
End If
End Sub
Дата 6.12.2006, 09:59 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник
Сообщений: 8
Регистрация: 30.11.2006

Репутация: нет
Всего: нет

Скажите как рисовать в picturebox, а не в hdc.
я рисую так:
PictureBox1.CreateGraphics.FillRectangle(. )
похоже что все попадает в hdc. Поэтому и ругается.

Дата 6.12.2006, 11:38 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 5
Всего: 149

sergexp, блин. Ты хоть что-то читаешь что тебе дают?

Ты хочешь сохранить объект image, который привязан к пикчербоксу.
Но у тебя его нет
Потом, что рисуешь ты сам И не на этом имадже, а на экране, в графической памяти компа
Чтобы сохранить картинку из памяти нужно:

Код
Public Sub SaveToFile(ByVal sfd As SaveFileDialog, ByVal pb As PictureBox)
sfd.Title = "Save to file"
sfd.Filter = "JPEG Images (*.jpg,*.jpeg)|*.jpg;*.jpeg|Gif Images (*.gif)|*.gif|Bitmaps (*.bmp)|*.bmp"
sfd.FilterIndex = 1
sfd.OverwritePrompt = True
If sfd.ShowDialog() = Windows.Forms.DialogResult.OK Then

Dim image As New Bitmap(pb.Width, pb.Height)
Dim gr As Graphics = Graphics.FromImage(image)

' тут нужно либо продублировать код рисования,
' используя в качестве графикса gr
' либо вызвать PicBox_OnDraw(pb, gr)
' либо pb.OnDraw(pb, gr)

  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »

[ Время генерации скрипта: 0.1552 ] [ Использовано запросов: 21 ] [ GZIP включён ]

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

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