当前位置: 首页 > 编程语言 > C#

序列化System.Windows.Media.ImageSource对象共享

时间:2023-04-11 10:32:14 C#

序列化System.Windows.Media.ImageSource对象我正在创建一个非常基本的聊天应用程序,我使用tcp连接建立聊天。我经常通过网络流发送序列化对象,因为它更容易编程。无论如何,如果我有一个类person{publicstringname{get;set;}}那么序列化那个类就很容易了。当我包含一个publicImageSourceImg{get;set;}时,我无法再序列化班级人物。我序列化的方式是:Personp=newPerson();p.name=\somenamep.Img=\someimageSystem.Xml.Serialization.XmlSerializerx=newSystem.Xml.Serialization.XmlSerializer(p.GetType());x.Serialize(connection.stream,p);//问题来了。如果包含Img,我将无法序列化它您无法将图像序列化为XML,但您可以将其保存到MemoryStream并将二进制数据编码为base64。stringImageToBase64(BitmapSource位图){varencoder=newPngBitmapEncoder();varframe=BitmapFrame.Create(位图);encoder.Frames.Add(帧);使用(varstream=newMemoryStream()){encoder.Save(stream);返回Convert.ToBase64String(stream.ToArray());}}BitmapSourceBase64ToImage(stringbase64){byte[]bytes=Convert.FromBase64String(base64);使用(varstream=newMemoryStream(bytes)){返回BitmapFrame。创建(流);请注意,base64的空间效率不高......如果可能,最好以二进制形式而不是XML形式传输图像。您的方法是正确的,但是一旦类Person包含任何不可序列化的对象(如您的ImageSource),它就不再有效。如果我必须在靠近您的解决方案的地方修复它,我会存储图像的byte[]并在反序列化后解析它以重建ImageSource。您可以在System.Windows.Media.Imaging命名空间中使用BinaryFormatter或可用的编码器,例如http://sofzh.miximages.com/c%23/system.windows.media.imaging.jpegbitmapencoder.aspx。另请参见WPFBitmapImage序列化/反序列化。如果你想使用字符串(xml),那么我认为Base64是唯一的方法。以上就是C#学习教程:序列化System.Windows.Media.ImageSource对象分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢