C# 在WinRT中序列化位图图像

C# 在WinRT中序列化位图图像,c#,serialization,windows-8,windows-runtime,winrt-xaml,C#,Serialization,Windows 8,Windows Runtime,Winrt Xaml,我正在尝试序列化它。 实际上,我正在做以下工作 [DataMember] Public Image img{get;set;} 我试图序列化位图图像,但它本身就是一个问题。 我一直收到此错误,并且我的BitmapImage有一个属性 无法序列化类型“Windows.UI.Xaml.Media.ImageSource”。考虑使用DATACONTractAttor属性对其进行标记,并标记要使用DATAMEMBAREATE属性序列化的所有成员。如果类型是集合,请考虑用CopyDATAcNoTract

我正在尝试序列化它。 实际上,我正在做以下工作

[DataMember]
Public Image img{get;set;}
我试图序列化位图图像,但它本身就是一个问题。 我一直收到此错误,并且我的BitmapImage有一个属性

无法序列化类型“Windows.UI.Xaml.Media.ImageSource”。考虑使用DATACONTractAttor属性对其进行标记,并标记要使用DATAMEMBAREATE属性序列化的所有成员。如果类型是集合,请考虑用CopyDATAcNoTractAttor标记它。有关其他受支持的类型,请参阅Microsoft.NET Framework文档


DataContractSerializer
无法处理图像。你应该使用(如果您正在处理
WriteableBitmap
或只是序列化
BitmapImage
的源地址。如果位图是从本地路径或临时URL加载的,并且您希望保留整个位图,则无论如何都无法从
BitmapImage
提取位图位,因此您需要下载源代码从原始源URL获取文件或复制加载的本地文件。然后,您可以将该副本另存为松散文件,或在
DataContractSerializer
创建的XML中序列化为Base64。

Filip,我从视频中获取图像作为缩略图,如您所见,问题是我没有要复制到本地文件夹的名称r并将其作为Uri检索。正如您在上面的代码中所看到的,我需要保存bitmapImage或其源代码,我不知道如何执行这两个操作。如果您能提供一个简单的示例,那将非常好,谢谢。没有简单的示例。您无法序列化bitmapImage本身,句号。如果它是使用Uri加载的-您可以保存Uri或使用它加载原始图像的字节。如果它与流一起加载-您需要跟踪该流的源,并且在需要序列化BitmapImage时-您可以序列化该流(已序列化)流。顺便说一句,如果你的视频缩略图问题解决了,你能接受答案吗?如果你找到了另一个答案,你能添加你自己的答案吗?如果你的意思是如何从视频中获取缩略图,代码在上面,var thumb=item.GetThumbnailAsync(…),其中项是存储文件,抱歉,但我的英语不是很好。:Dlast thing,我找到了以下代码。var stm=thumb.AsStream();byte[]bytes=new byte[Convert.ToUInt32(thumb.Size)];stm.Position=0;wait stm stm.ReadAsync(bytes,0,bytes.Length);InMemoryRandomAccessStream randomAccessStream=new InMemoryRandomAccessStream();DataWriter writer=new DataWriter(randomAccessStream.GetOutputStreamAt(0));writer.WriteBytes(字节);wait writer.StoreAsync();BitmapImage imagen=new BitmapImage();imagen.SetSource(randomAccessStream);这可能行得通吗?这似乎大致上像是您可以将文件转换为
位图图像
,但感觉可能有点太多了,因为它看起来像是将流复制到缓冲区,然后在从中加载
位图图像
之前写入另一个流,但您说您想序列化it、 是否要序列化包含压缩图像字节的randomAccessStream?
[DataMember]
Public Image img{get;set;}
var thumb = await item.GetThumbnailAsync(Windows.Storage.FileProperties.ThumbnailMode.PicturesView,
                        1000, Windows.Storage.FileProperties.ThumbnailOptions.UseCurrentScale);

BitmapImage bmg = new BitmapImage();
bmg.SetSource(thumb);
Image img = new Image();
img.Source = bmg;