2009-05-08 2 views
1

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

Вот код:

  // then save it 
     ImageBoxInApp.Image.Save(filename); 

[EDIT] И я открываю изображение с этой

openFileDialog1.Title = "Select an Image"; 
     openFileDialog1.Filter = "All Files|*.*|Windows Bitmaps|*.bmp|JPEG Files|*.jpg"; 
     if (openFileDialog1.ShowDialog() == DialogResult.OK) 
     { 
      filename = openFileDialog1.FileName; 
      Image img = System.Drawing.Image.FromFile(filename); 

Так что, когда я пытаюсь это я получаю . Так что я нашел solution к этому, и это выглядит следующим образом:

 // Delete existing file first 
     System.IO.File.Delete(filename); 
     // then save it 
     ImageBoxInApp.Image.Save(filename); 

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

Как «закрыть» файл без фактического закрытия приложения? Или есть альтернативное решение?

Спасибо!

ответ

1

Сложно сказать, не видя некоторый контекст вокруг того, как ваша загрузка файла, но здесь есть несколько предложений:

  1. Перед сохранением, скопируйте существующий файл в новый образ, закройте оригинал, выполните удалить и сохранить копию.
  2. Сохраните файл в произвольном имени файла, удалите оригинал, переименуйте файл с произвольным именем в исходное имя.
  3. Загрузите файл в поток памяти и используйте копию в памяти для инициализации изображения.

Я бы лично пошел с вариантом № 3 для большинства случаев. Обязательно удаляйте изображение, когда вы его используете, - лучше всего, если вы можете обернуть его в блок using().

+0

4. вместо создания изображения из имени файла создайте изображение из потока, созданного из имени файла, и закройте поток после создания изображения (с предпочтительным использованием() блока). Это работало для меня, и мне было лучше. – sluki

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