随笔 - 42,  文章 - 0,  评论 - 19,  阅读 - 42059

作者:@gzdaijie
本文为作者原创,转载请注明出处:https://www.cnblogs.com/maozhh/p/6731590.html


目录

复制代码
 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     }
复制代码

 

posted on   油纸伞  阅读(970)  评论(0)    收藏  举报
编辑推荐:
· 如何把ASP.NET Core WebApi打造成Mcp Server
· Linux系列:如何用perf跟踪.NET程序的mmap泄露
· 日常问题排查-空闲一段时间再请求就超时
· Java虚拟机代码是如何一步一步变复杂且难以理解的?
· 领域驱动的事实与谬误 一 DDD 与 MVC
阅读排行:
· 如何把ASP.NET Core WebApi打造成Mcp Server
· 排行榜的5种实现方案!
· 在 .NET 中使用 Sqids 快速的为数字 ID 披上神秘短串,轻松隐藏敏感数字!
· 突破Excel百万数据导出瓶颈:全链路优化实战指南
· ChatGPT为何放弃WebSocket?揭秘EventSource的三大决胜优势
< 2025年5月 >
27 28 29 30 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
1 2 3 4 5 6 7

点击右上角即可分享
微信分享提示