У меня возникли проблемы при попытке сериализации объекта, содержащего поле BitmapSource.
На самом деле, в начале у меня был ImageSource, но он не был сериализуемым.
Поэтому я попытался использовать соответствующее свойство для хранения строки, а также для преобразования и преобразования изображения обратно в / из строки. Но изображение теперь не отображается: - (
вот тег изображения XAML:
<Image
x:Name="bookCover"
Grid.Row="0"
Grid.RowSpan="1"
Grid.Column="0"
MaxWidth="200"
MaxHeight="320"
Margin="5"
Source="{Binding Image}" SizeChanged="bookCover_SizeChanged" >
</Image>
вот свойство Image и поле в классе модели:
public string _image;
public BitmapSource Image
{
get => Base64ToImage(_image);
set
{
_image =ImageToBase64(value);
OnPropertyChanged("Image");
}
}
и связанные с ними методы:
public static string ImageToBase64(BitmapSource bitmap)
{
var encoder = new JpegBitmapEncoder();
var frame = BitmapFrame.Create(bitmap);
encoder.Frames.Add(frame);
using (var stream = new MemoryStream())
{
encoder.Save(stream);
return Convert.ToBase64String(stream.ToArray());
}
}
public static BitmapSource Base64ToImage(string base64)
{
byte[] bytes = Convert.FromBase64String(base64);
using (var stream = new MemoryStream(bytes))
{
return BitmapFrame.Create(stream);
}
}
и здесь моя программа получает изображение из интернета через его URI и сохраняет его:
var myUri=new Uri(book0.LargeImage.URL);
bookToInsert.Image = new BitmapImage(myUri);
спасибо.