2016-11-30 9 views
-1

Мои проблемы в том, что я не могу перезаписать недавно открывшееся изображение. Итак, давайте представим, я открываю файл с openfiledialog:Получение общей ошибки GDI + при сохранении изображения

OpenFileDialog OpenFileDialog1 = new OpenFileDialog(); 

OpenFileDialog1.InitialDirectory = "c:\\"; 
OpenFileDialog1.Filter = "Images|*.GIF;*.TIF;*.JPG;*.BMP"; 
OpenFileDialog1.RestoreDirectory = true; 

if (OpenFileDialog1.ShowDialog() == DialogResult.OK) 
{ 
     if ((OpenFileDialog1.OpenFile()) != null) 
     { 
      if (string.IsNullOrEmpty(OpenFileDialog1.FileName)) 
       return; 

      pictureBox1.Image = Image.FromFile(OpenFileDialog1.FileName); 
     } 
} 
OpenFileDialog1.Dispose(); 

После того как я сделал некоторые корректировки на PictureBox (например, нарисовали что-то), я хочу, чтобы сохранить изображение (в тот же файл, из которого я открыли изображение) с savefiledialog.

SaveFileDialog saveFileDialog1 = new SaveFileDialog(); 

saveFileDialog1.Filter = "BMP File|*.BMP"; 
saveFileDialog1.RestoreDirectory = true; 

if (saveFileDialog1.ShowDialog() == DialogResult.OK) 
{ 
    pictureBox1.Image.Save(saveFileDialog1.FileName, ImageFormat.Bmp); 
} 

Это дает мне ошибку (System.Runtime.InteropServices.ExternalException) также известный как GDI + общей ошибкой. Таким образом, это в основном ошибка, которая запрещает мне перезаписывать недавно открывшийся файл.

+0

Пожалуйста, позаботьтесь о том, чтобы правильно использовать названия вещей, к которым вы обращаетесь. Вы и @myb оба означают GDI +, а не GDI. Они разные API, с разными правилами, и это не только беспокоит мое OCD, но также влияет на точность результатов поиска (если вы надеялись на другое сокращение, попробуйте SEO). –

ответ

-1

Image Загружено: Image.FromFile() - Отправка файла.

Вы можете загрузить изображение, чтобы освободить ресурсы, но я не думаю, что PictureBox был бы слишком доволен, если он все еще показывает старое изображение.

В качестве альтернативы вы можете загрузить содержимое файла в MemoryStream и использовать Image.FromStream().

+0

А затем удалите объект MemoryStream? –

+0

@EdwardAblekimov, когда вы закончили с изображением, которое вы можете его уничтожить - дело в том, что вы не пытаетесь удалить его, прежде чем пытаться перезаписать файл, так как «источник изображения» теперь является «MemoryStream», который не блокировать ввод/вывод файлов. –

+0

Downvoter, вы можете поделиться, почему вы отказались от этого ответа? Я хотел бы узнать. –

Смежные вопросы