Следующий фрагмент кода воспроизводит вашу проблему.
var dataString = ImageToBase64(pictureBox1.Image, System.Drawing.Imaging.ImageFormat.Jpeg);
pictureBox2.Image = Base64ToImage(dataString);
pictureBox2.Image.Save("D\\Images\\'" + pictureBox2.Image + "'", System.Drawing.Imaging.ImageFormat.Jpeg);
, которая относится к "D\\Image\\'" + pictureBox1.Image + "'"
Я получил следующую трассировку стека при выполнении этих фрагментов
System.Runtime.InteropServices.ExternalException
HResult=0x80004005
Message=A generic error occurred in GDI+.
Source=System.Drawing
StackTrace:
at System.Drawing.Image.Save(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams)
at System.Drawing.Image.Save(String filename, ImageFormat format)
at WindowsFormsApp1.Form1.button1_Click(Object sender, EventArgs e) in C:\Users\brcaswell\Source\Repos\WindowsFormsApp1\WindowsFormsApp1\Form1.cs:line 25
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at WindowsFormsApp1.Program.Main() in C:\Users\brcaswell\Source\Repos\WindowsFormsApp1\WindowsFormsApp1\Program.cs:line 19
это неверный путь к файлу и \ или каталог не существует.
это исправит его
var filePath = @"D:\Images\";
Directory.CreateDirectory(filePath);
pictureBox2.Image.Save(Path.Combine(filePath, $"'{pictureBox2.Image}'"), System.Drawing.Imaging.ImageFormat.Jpeg);
Однако вы должны помнить, что '{pictureBox2.Image}'
приведет к в типе toString
и будет 'System.Drawing.Bitmap'
в качестве имени файла. Вы должны исправить это и включить расширение файла
Path.Combine(filePath, "myImage.jpeg")
Кроме того, как @ 'Peter Duniho' упомянул в своем комментарии к этому вопросу, вы должны рассмотреть вопрос о сохранении этого файла изображения способом, не связанным с graphi c контекст элемента управления графическим блоком.
Кроме того, следует рассмотреть возможность сохранения изображений в виде двоичного файла byte[]
в базе данных, а не в виде строковых представлений base64.