Я хотел бы сериализовать объект System.Windows.Media.PixelFormat
, а затем воссоздать его путем десериализации. Что я делаю:Serialize PixelFormat
BitmapSource bitmapSource = backgroundImage.ImageSource as BitmapSource;
PixelFormat pixelFormat = bitmapSource.Format;
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("test", FileMode.Create, FileAccess.Write, FileShare.None);
formatter.Serialize(stream, pixelFormat);
stream.Close();
, а затем
PixelFormat pixelFormat;
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("test", FileMode.Open, FileAccess.Read, FileShare.Read);
pixelFormat = (PixelFormat)formatter.Deserialize(stream);
stream.Close();
сериализации не дает каких-либо ошибок. Когда я пытаюсь десериализации этот объект также не дает какой-либо ошибки, но возвращаемый объект не является хорошим, например, в BitsPerPixel
поля имеет BitsPerPixel = 'pixelFormat.BitsPerPixel' threw an exception of type 'System.NotSupportedException'
@edit У меня есть работа вокруг этой проблемы. Мы должны использовать PixelFormatConverter для преобразования объекта PixelFormat в строку, а затем сериализуем строку. При десериализации мы получаем строку и с помощью PixelFormatConverter преобразуем ее обратно в PixelFormat.
Вы десериализируетесь на том же или другом компьютере? Поддерживаемые значения некоторых свойств зависят от оборудования (и драйверов). –
Я сериализую и десериализую на том же компьютере. –
Возможно, вы захотите проверить исходный код PixelFormat (http://referencesource.microsoft.com/#PresentationCore/Core/CSharp/System/Windows/Media/PixelFormat.cs,514cf14a5172deb3.references). Это в основном просто обертка для enum-подобной конструкции. Может быть, вы можете сериализовать 'pixelFormat.ToString()', а затем использовать 'PixelFormatConverter', чтобы преобразовать эту строку обратно в' PixelFormat'? – vesan