Перезапись файла изображения (bitmap)
Вопрос
Здравствуйте, я пытаюсь сохранить растровое изображение в базовой программе редактирования изображений.
Вот код:
// then save it
ImageBoxInApp.Image.Save(filename);
[ПРАВИТЬ] И я открываю изображение этим
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);
Итак, когда я пробую это, я получаю Generic GDI+ error
.Итак, я нашел решение к этому, и это выглядит примерно так:
// Delete existing file first
System.IO.File.Delete(filename);
// then save it
ImageBoxInApp.Image.Save(filename);
Но когда я пытаюсь это сделать, я получаю еще одно сообщение об ошибке, в котором говорится, что файл, который я удаляю, в данный момент открыт.Это потому, что это тот файл, который я пытаюсь отредактировать.
Как мне "закрыть" файл, фактически не закрывая приложение?Или есть альтернативное решение?
Спасибо!
Решение
Трудно сказать, не видя некоторого контекста вокруг того, как вы загружаете файл, но вот пара предложений:
- Перед сохранением скопируйте существующее изображение в новое изображение, закройте оригинал, выполните удаление и сохраните копию.
- Сохраните файл с произвольным именем файла, удалите оригинал, переименуйте файл со случайным именем в исходное имя.
- Загрузите файл в поток памяти и используйте копию в памяти для инициализации изображения.
Лично я бы выбрал вариант № 3 для большинства случаев.Обязательно удалите изображение, когда закончите его использовать - лучше всего, если вы сможете обернуть его в блок using ( ).