Сохраняем изображение из System.Drawing.Image в произвольной папке

После редактирования изображения, как правило, требуется сохранить результат. Однако сделать это не всегда так просто, как может показаться с первого взгляда.

Например, такое сохранение изображения из System.Drawing.Image.

Данное решение кажется очевидным. Но, на самом деле оно приводит к возникновению исключения «System.Runtime.InteropServices.ExternalException».

В чём причина ошибки?

Дело в том, что при сохранении файла с помощью метода Save используются относительные пути к файлам. То есть, путь, переданный в первом параметре данного метода, просто добавляется к полному пути текущей рабочей папки (по умолчанию, папка программы). В тоже время, даже если передан относительный путь, не обеспечивается ни проверка существования целевой папки, ни, тем более, её создание. Поэтому, относительный путь также не является гарантией от возникновения этого исключения.

Так как же тогда реализовать сохранение изображения в произвольном месте на диске?

Для начала, необходимо проверить существование нужной папки и, если она не существует, обеспечить её создание.

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

1.Целевая папка является одной из подпапок в текущей папке.

Здесь на самом деле всё просто. Передаём в метод Save относительный путь и задача выполнена.

2.Целевая папка может быть расположена в произвольном месте на произвольном носителе.

Здесь уже гораздо сложнее.

Чтобы сохранение было выполнено без ошибок вначале необходимо сменить текущую рабочую папку с папки по умолчанию (папка программы) на папку, в которой нужно сохранить изображение. И только после этого сохранять файл, используя относительный путь.

Приведённый способ является принципе универсальный и может быть легко использован совместно с диалоговым окном выбора папки или сохранения файла. Однако изменение рабочей папки, пусть и вынужденное, но всё же не желательное действие.

Поэтому, после сохранения изображения лучше вернуть значение по умолчанию. Самый лучший вариант, если возврат значения по умолчанию обеспечен даже при возникновении нештатных ситуаций.

Например, так:

В результате обеспечивается, как возможность сохранения в произвольной папке, так и достаточно надёжный возврат к первоначальной текущей рабочей папке.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *