Как сохранить изображение с 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 включён ]