Я использую System.Drawing.Image.FromFile(filePath)
для чтения файла изображения .PNG в переменную Image
для отображения во всплывающем диалоговом окне. Пользователь может изменить это изображение с помощью элементов управления в диалоговом окне, и когда они нажмут кнопку «ОК», чтобы закрыть диалог, изображение в его текущем состоянии будет записано обратно в файл, из которого он был первоначально прочитан, вызвав Image.Save(filePath, format)
.Сохранение неизмененного изображения в файл, который был прочитан с
Это прекрасно работает, если они изменяют изображение. Например, они могут вращать изображение, для которого я звоню Image.RotateFlip()
.
Однако не работает, если они не изменяют изображение, то есть первое, что они делают, когда появляется всплывающее окно, нажмите кнопку «ОК». Это приводит к «общей ошибке GDI +».
Результаты Google заставляют меня поверить, что какая-то блокировка исходного файла сохраняется до тех пор, пока данные изображения не будут изменены. Вызов Image.Save()
перед изменением изображения конфликтует с блокировкой, но вызывает его после модификации, потому что больше нет блокировки.
К сожалению, у меня возникли проблемы с поиском любых других сообщений о моей конкретной проблеме. Поэтому мне интересно: почему я не могу сохранить Image
в файл, который был прочитан, если я не изменю его?
Наиболее прямым решением этой проблемы является выполнение некоторой необнаруживаемой модификации на Image
(например, поворот на 360 градусов) сразу после ее загрузки. Но это ужасно хаки.
Я бы посмотрел, был ли отредактирован Image
и просто не сохранил его, если не было выполнено редактирование, но, похоже, нет простого способа сделать это, не используя булевский флаг и его установку в любом коде, который изменяет изображение. Но это немного хрупко, поскольку любой, кто добавит код изменения изображения в будущем, должен знать, чтобы установить этот флаг в свой код.
В конечном счете, мой вопрос: что является лучшим способом решения этой проблемы?