【发布时间】:2018-11-16 22:41:24
【问题描述】:
我在尝试序列化包含 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 从 Internet 检索图像并存储它:
var myUri=new Uri(book0.LargeImage.URL);
bookToInsert.Image = new BitmapImage(myUri);
谢谢。
【问题讨论】:
-
您确定要序列化字符串而不是字节数组吗?
-
你知道的,我会使用我得到的第一个工作方法......一个字符串或一个字节数组等于我。顺便说一句,我发现很难获得一些关于如何序列化图像和位图编码器的教程......
标签: c# wpf image type-conversion bitmapimage