Image(支持 XML 序列化),注意C#中原生的Image类是无法进行Xml序列化的
2024-09-05 20:30:36
/// <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;
}
}
最新文章
- Azkaban源码学习笔记
- Maven的安装配置
- 更新CocoaPods碰到的问题及知识点
- WebServices CXF开发常见异常及解决方法
- CentOS用yum安装X Window
- MySQL外键约束On Delete、On Update各取值的含义
- Unity NGUI 创建简单的按钮
- Qt 释放新建窗口资源
- JVM调优总结(三)-基本垃圾回收算法
- python3.4 data type
- [MFC美化] SkinMagic使用详解1- SkinMagic使用流程
- 在Windows 10 Anniversary下配置Caffe
- VisualStudio 合并代码文件
- golang中Context的使用场景
- CentOS7.x安装MySQL5.7.25
- canvas里设置width和css里设置width和js里设置width的区别
- 为什么会出现container/injection的思想?
- 转 C++函数返回值,你必须注意的问题
- 浏览器中上传Excel文件,服务器获取Excel字段。写入的数据库中。操作Excel的方式jxl和poi。
- DUBBO本地搭建及小案例 (转)
热门文章
- LeafLet之气泡框隐藏";x";图标
- NCBI SRA数据库
- SVN needs-lock 设置强制只读属性【转】
- ACM-ICPC2018焦作网络赛 Mathematical Curse(dp)
- POJ - 1458 Common Subsequence DP最长公共子序列(LCS)
- LeetCode: 598 Range Addition II(easy)
- jzoj6008. 【THUWC2019模拟2019.1.18】Sequence (矩阵加速)
- uoj#280. 【UTR #2】题目难度提升(构造)
- uoj#36. 【清华集训2014】玛里苟斯(线性基+概率期望)
- HDMI和VGA接口