正在序列化包含BitmapImage的对象
本文关键字:对象 BitmapImage 包含 序列化 | 更新日期: 2023-09-27 18:29:04
这是关于这个主题的另一个问题:如何使用反序列化对象?我的类中的一些变量有问题,现在我只是把[XmlIgnore]
放在无法序列化的变量前面,所以类的序列化目前有效。
我的课是这样的:
public class Channel : INotifyPropertyChanged
{
public int Width { get; set; }
public int Height { get; set; }
[XmlIgnore]
public BitmapImage Logo { get; set; }
public string CurrentCoverURL { get; set; }
[XmlIgnore]
public SolidColorBrush Background { get; set; }
private string name;
public string Name
{
get { return name; }
set
{
name = value;
NotifyPropertyChanged("Name");
}
}
}
现在我不知何故也需要序列化Bitmapimage和SolidColorBrush,这样我就可以将这些信息传递到我的下一个视图。
我找到了一种方法(将C#/.NET中的位图序列化为XML),但这对Windows 8应用程序不起作用。System.Drawing.Bitmap
在Windows 8中不可用。
有人能帮我解决这个问题吗?
谢谢!
这帮助我做了同样的事情。只需先转换为字节数组。
http://jamessdixon.wordpress.com/2013/10/01/handling-images-in-webapi/
您可以将您的图像包含在JSON负载中,如下所示:
public class Person
{
public Int32 PersonId { get; set; }
public String FirstName { get; set; }
public byte[] Image { get; set; }
}
或者,您可以在JSON负载中包含imageUri,如下所示:
public class Person
{
public Int32 PersonId { get; set; }
public String FirstName { get; set; }
public String ImageUri { get; set; }
}
您可以将位图图像转换为这样的字节数组;
public static byte[] ConvertToBytes(BitmapImage bitmapImage)
{
using (var ms = new MemoryStream())
{
var btmMap = new WriteableBitmap
(bitmapImage.PixelWidth, bitmapImage.PixelHeight);
// write an image into the stream
btmMap.SaveJpeg(ms, bitmapImage.PixelWidth, bitmapImage.PixelHeight, 0, 100);
return ms.ToArray();
}
}
最好停止序列化实现(如BitmapImage
、SolidColorBrush
等),开始序列化data。例如,如果您想传输jpg、gif等图像:byte[]
的效果非常好,大多数序列化程序都能理解。如果你想序列化一种颜色,那么你有各种选择:
- 枚举
- RGBA值(可以是
int
或string
)
等等。这在几乎任何序列化程序和平台上都能很好地工作。然后,您只需以与目标平台相关的方式处理这些数据。
"我找到了一种方法(将C#/.NET中的位图序列化为XML),但这不适用于Windows 8应用程序。System.Drawing.Bitmap在Windows 8中不可用。"
您可以使用BitmapImage.StreamSource将/CopyTo保存到MemoryStream并将其转换为字节数组