1     /// <summary>
 2     /// Image(支持 XML 序列化)
 3     /// </summary>
 4     [XmlRoot("XmlImage")]
 5     public class XmlImage : IXmlSerializable
 6     {
 7         public System.Drawing.Image Image { get; set; }
 8
 9         #region 构造函数
10
11         public XmlImage()
12         { }
13
14         protected XmlImage(SerializationInfo info, StreamingContext context)
15         { }
16         #endregion 构造函数
17
18         #region IXmlSerializable Members
19         public XmlSchema GetSchema() => null;
20
21         /// <summary>
22         ///     从对象的 XML 表示形式生成该对象(反序列化)
23         /// </summary>
24         /// <param name="xr"></param>
25         public void ReadXml(XmlReader xr)
26         {
27             if (xr.IsEmptyElement)
28                 return;
29             xr.ReadToFollowing(nameof(XmlImage));
30             Image = FromBase64String(xr.ReadElementContentAsString());
31             xr.ReadEndElement();
32         }
33
34         /// <summary>
35         ///     将对象转换为其 XML 表示形式(序列化)
36         /// </summary>
37         /// <param name="xw"></param>
38         public void WriteXml(XmlWriter xw)
39         {
40             xw.WriteStartElement(nameof(XmlImage));
41             xw.WriteValue(ToBase64String(Image, ImageFormat.Png));
42             xw.WriteEndElement();
43         }
44         #endregion IXmlSerializable Members
45
46         private static string ToBase64String(System.Drawing.Image img, ImageFormat format)
47         {
48             if (img != null)
49             {
50                 using (var ms = new MemoryStream())
51                 {
52                     img.Save(ms, format);
53                     byte[] buffer = ms.ToArray();
54                     return Convert.ToBase64String(buffer);
55                 }
56             }
57             return string.Empty;
58         }
59
60         private static System.Drawing.Image FromBase64String(string base64Str)
61         {
62             System.Drawing.Image img = null;
63             using (var ms = new MemoryStream())
64             {
65                 try
66                 {
67                     var buffer = Convert.FromBase64String(base64Str);
68                     ms.Write(buffer, 0, buffer.Length);
69                     img = System.Drawing.Image.FromStream(ms);
70                 }
71                 catch
72                 {
73                     // ignored
74                 }
75             }
76             return img;
77         }
78     }

转载于:https://www.cnblogs.com/maozhh/p/6731590.html

Image(支持 XML 序列化),注意C#中原生的Image类是无法进行Xml序列化的相关推荐

  1. PNaCl:Google通过LLVM增强对Chrome中原生应用的支持

    作者 Abel Avram ,译者 臧秀涛 发布于 五月 20, 2013 通过支持运行LLVM位码(bitcode),Google增强了对Chrome中原生应用的支持. 在Google I/O 20 ...

  2. android 序列化 xml serializable,关于Android中的序列化Serializable和Parcelable的学习

    简单地说,"序列化"就是将运行时的对象状态转换成二进制,然后保存到流,内存或者通过网络传输给其他端. 两者最大的区别在于 存储媒介的不同,Serializable使用 I/O 读写 ...

  3. android xml对象,对象转成xml(并且序列化xml)在android中

    第一种 在本地生成AppuserManager.xml文件,并且把对象转成了xml格式 package com.example.hasee.myxml; import android.app.Acti ...

  4. 序列化: 一个老家伙的咸鱼翻身(Java对象、XML、JSON、反序列化)

    转自:码农翻身(微信号:coderising) 1.寒冬的蛰伏 这里的工作很繁忙,一年365天, 一天24小时几乎不停工. 但是我却是一个闲人, 因为我做的工作最近用的人太少了, 经常被冷落在一边. ...

  5. java中原生方法_java中原生(native)函数的用法

    1.原生(Native)函数的概念 在Java程序中,可以使用由其他编程语言实现的函数,这种函数,在Java中被称之为 原生(Native)函数. 2.在Java程序中使用原生函数的优缺点 1)优点 ...

  6. python中常用的序列化模块_Python中的序列化和反序列化

    为什么要序列化 内存中的字典.列表.集合以及各种对象,如何保存到一个文件中. 设计一套协议,按照某种规则,把内存中的数据保存到文件中,文件是一个个字节序列.所以必须把数据额转换为字节序列,输出到文件, ...

  7. Python 中 xpath 语法 与 lxml 库解析 HTML/XML 和 CSS Selector

    The lxml.etree Tutorial :https://lxml.de/tutorial.html python3 解析 xml:https://www.cnblogs.com/deadwo ...

  8. android xml java混合编程_Java学习中注解与多线程,网络编程与XML技术

    本部分内容主要有集合框架及泛型,实用类,输入和输出处理,注解与多线程,网络编程与XML技术.初次学习这部分会感觉很难,主要是概念难于理解,最好是多看看例子,多练习.下面是个人的总结 拉勾IT课小编为大 ...

  9. Java中原生(native)函数的用法

    1.原生(Native)函数的概念 在Java程序中,可以使用由其他编程语言实现的函数,这种函数,在Java中被称之为 原生(Native)函数. 2.在Java程序中使用原生函数的优缺点 1)优点 ...

  10. Android解析xml的方法,Android中解析XML格式数据的方法

    XML介绍:Extensible Markup Language,即可扩展标记语言 一.概述 Android中解析XML格式数据大致有三种方法: SAX DOM PULL 二.详解 2.1 SAX S ...

最新文章

  1. xampp mysql5.6_xampp运行MySQL shutdown unexpectedly解决方案
  2. 【VIOLA】宁可食无肉,不可居无竹
  3. 卷积的物理意义(经典)
  4. php 重定向 cookie,php – 如何在CURL重定向上传递Cookie?
  5. 锁的释放流程-unparkSuccessor
  6. JavaScript 中的 this
  7. [ZJOI2008]骑士
  8. 未处理的超时和请求取消
  9. linux里命令pkg-config工具的使用
  10. 关羽卖枣,张飞杀猪,二人何以有“盖世武功”?
  11. 计算机地图制图算法与原理重点,计算机地图制图算法.pptx
  12. Win7怎么进入注册表(regedit)
  13. python3 打点计时
  14. C++期末项目设计------制作一个游戏盒
  15. [2020.1.10]systemd介绍
  16. 展示 用户画像_到底如何做用户画像?
  17. 天猫高管全面解读大快消2018新零售打法
  18. anki怎么设置学习计划_Anki:用这套记忆卡片,学习一切你背不下来的知识 #iOS #Android #PC...
  19. Python Print打印计时器功能
  20. mysql 百万级别 更新_mysql百万级数据高效插入和更新

热门文章

  1. Android分发事件
  2. [10秒学会] - iOS录制屏幕 ReplayKit
  3. Android getReadableDatabase() 和 getWritableDatabase()
  4. ubuntu常用软件安装集合:360浏览器、QQ--持续更新
  5. Cypress自动化测试系列之三
  6. 第二届蓝桥杯省赛---夺冠概率
  7. day1-接口测试与接口测试工具
  8. 安装SQLServer2008后Windows防火墙上的端口开放
  9. 没有Path的Binding
  10. springboot中解决servlet乱码问题,使用配置类注册过滤器解决