/// <summary>
/// Image(支持 XML 序列化)
/// </summary>
[XmlRoot("XmlImage")]
public class XmlImage : IXmlSerializable
{
public System.Drawing.Image Image { get; set; } #region 构造函数 public XmlImage()
{ } protected XmlImage(SerializationInfo info, StreamingContext context)
{ }
#endregion 构造函数 #region IXmlSerializable Members
public XmlSchema GetSchema() => null; /// <summary>
/// 从对象的 XML 表示形式生成该对象(反序列化)
/// </summary>
/// <param name="xr"></param>
public void ReadXml(XmlReader xr)
{
if (xr.IsEmptyElement)
return;
xr.ReadToFollowing(nameof(XmlImage));
Image = FromBase64String(xr.ReadElementContentAsString());
xr.ReadEndElement();
} /// <summary>
/// 将对象转换为其 XML 表示形式(序列化)
/// </summary>
/// <param name="xw"></param>
public void WriteXml(XmlWriter xw)
{
xw.WriteStartElement(nameof(XmlImage));
xw.WriteValue(ToBase64String(Image, ImageFormat.Png));
xw.WriteEndElement();
}
#endregion IXmlSerializable Members private static string ToBase64String(System.Drawing.Image img, ImageFormat format)
{
if (img != null)
{
using (var ms = new MemoryStream())
{
img.Save(ms, format);
byte[] buffer = ms.ToArray();
return Convert.ToBase64String(buffer);
}
}
return string.Empty;
} private static System.Drawing.Image FromBase64String(string base64Str)
{
System.Drawing.Image img = null;
using (var ms = new MemoryStream())
{
try
{
var buffer = Convert.FromBase64String(base64Str);
ms.Write(buffer, , buffer.Length);
img = System.Drawing.Image.FromStream(ms);
}
catch
{
// ignored
}
}
return img;
}
}

最新文章

  1. Azkaban源码学习笔记
  2. Maven的安装配置
  3. 更新CocoaPods碰到的问题及知识点
  4. WebServices CXF开发常见异常及解决方法
  5. CentOS用yum安装X Window
  6. MySQL外键约束On Delete、On Update各取值的含义
  7. Unity NGUI 创建简单的按钮
  8. Qt 释放新建窗口资源
  9. JVM调优总结(三)-基本垃圾回收算法
  10. python3.4 data type
  11. [MFC美化] SkinMagic使用详解1- SkinMagic使用流程
  12. 在Windows 10 Anniversary下配置Caffe
  13. VisualStudio 合并代码文件
  14. golang中Context的使用场景
  15. CentOS7.x安装MySQL5.7.25
  16. canvas里设置width和css里设置width和js里设置width的区别
  17. 为什么会出现container/injection的思想?
  18. 转 C++函数返回值,你必须注意的问题
  19. 浏览器中上传Excel文件,服务器获取Excel字段。写入的数据库中。操作Excel的方式jxl和poi。
  20. DUBBO本地搭建及小案例 (转)

热门文章

  1. LeafLet之气泡框隐藏&quot;x&quot;图标
  2. NCBI SRA数据库
  3. SVN needs-lock 设置强制只读属性【转】
  4. ACM-ICPC2018焦作网络赛 Mathematical Curse(dp)
  5. POJ - 1458 Common Subsequence DP最长公共子序列(LCS)
  6. LeetCode: 598 Range Addition II(easy)
  7. jzoj6008. 【THUWC2019模拟2019.1.18】Sequence (矩阵加速)
  8. uoj#280. 【UTR #2】题目难度提升(构造)
  9. uoj#36. 【清华集训2014】玛里苟斯(线性基+概率期望)
  10. HDMI和VGA接口