Сохранение и восстановление изображений, сделанных пользователем в C#

Оказывается, это замечательно легко. Следующий код показывает, как программа сохраняет объекты Polyline, хранящиеся в списке Polylines.

В коде отображается SaveFileDialog. Если пользователь выбирает файл и нажимает кнопку «Сохранить», программа создает объект XmlSerializer. Он передает конструктору тип вещи, который он будет сериализовать. В этом случае это тип данных переменной Polylines, которая List & lt; Polyline & gt;.

Затем программа создает связанный с этим файл StreamWriter. Он вызывает метод сериализатора Serialize, передавая ему StreamWriter и объект для сериализации.

Следующий код показывает, как программа десериализует сериализованный файл.

...

Затем программа создает файл FileStream, связанный с файлом, открывая его, создавая FileStream.

Затем код вызывает метод Deserialize сериализатора. Результатом является общий объект, поэтому программа передает его в тип List & lt; Polyline & gt;. Наконец, он сохраняет результат в переменной Polylines и обновляет рисунок PictureBox.

Если это были внесенные вами изменения, вы могли бы сохранить и восстановить Polylines, но они не будут иметь свои свойства Цвет. Оказывается, все остальные свойства класса Polyline (int, DashStyl и даже List & lt; Point & gt; ) все сериализуются автоматически, но класс Color не работает. Это означает, что при сериализации списка Polylines их цвета не сохраняются. Когда вы перезагружаете файл, программа рисует Polylines, но вы их не видите, потому что их цвета не перезагружены.

Обходной путь заключается в создании свойства, которое представляет Color, но может быть сериализовано. В этом примере используется свойство с именем Argb, которое получает и устанавливает цветные альфа-, красные, зеленые и синие цветные компоненты цвета в виде комбинированного целого. Целое число может автоматически сериализоваться, чтобы программа работала.

Чтобы избежать небольшого усилия, программа также помещает свойство Color с атрибутом XmlIgnore, поэтому сериализатор полностью игнорирует его.

Ниже показан измененный класс Polyline.

Источник: http://csharphelper.com/blog/2015/03/save-and-restore-pictures-drawn-by-the-user-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)

Add a Comment

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