Вопрос

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

Вот код:

         // 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);

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

Как мне "закрыть" файл, фактически не закрывая приложение?Или есть альтернативное решение?

Спасибо!

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top