序列化
Bitmap bitMap = new Bitmap(filename);
MemoryStream ms = new MemoryStream();
bitMap.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
StringWriter sw = new StringWriter();
XmlTextWriter xw = new XmlTextWriter(sw);
xw.Formatting = Formatting.Indented;
XmlSerializer ser = new XmlSerializer(ms.GetBuffer().GetType());
ser.Serialize(xw, ms.GetBuffer());
string xmlString = sw.GetStringBuilder().ToString();
xw.Close();
sw.Close();
ms.Close();
XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlString);
if (doc != null && doc.ChildNodes.Count > 1 && doc.ChildNodes[1] != null)
{
XmlNode node = doc.ChildNodes[1];
photoString = node.InnerText;
}
photoString 就是序列化之后的信息
反序列化
StringBuilder sb = new StringBuilder();
sb.Append("<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n<base64Binary>");
sb.Append(photoString);
sb.Append("</base64Binary>");
XmlTextReader xrw = new XmlTextReader(new StringReader(sb.ToString()));
MemoryStream ms = new MemoryStream();
XmlSerializer ser = new XmlSerializer(ms.GetBuffer().GetType());
Bitmap bitMap = new Bitmap(new MemoryStream((byte[])ser.Deserialize(xrw)));
//bitMap.Save(filePath);
ms.Close();
xrw.Close();
对于其他文件序列化
FileStream stream = new FileInfo(value).OpenRead();
byte[] buffer = new byte[stream.Length];
stream.Read(buffer, 0, Convert.ToInt32(stream.Length));
StringWriter sw = new StringWriter();
XmlTextWriter xw = new XmlTextWriter(sw);
xw.Formatting = Formatting.Indented;
XmlSerializer ser = new XmlSerializer(buffer.GetType());
ser.Serialize(xw, buffer);
string xmlString = sw.GetStringBuilder().ToString();
xw.Close();
sw.Close();
stream.Close();
XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlString);
if (doc != null && doc.ChildNodes.Count > 1 && doc.ChildNodes[1] != null)
{
XmlNode node = doc.ChildNodes[1];
fileString = node.InnerText;
}
反序列化
StringBuilder sb = new StringBuilder();
sb.Append("<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n<base64Binary>");
sb.Append(fileString);
sb.Append("</base64Binary>");
XmlTextReader xrw = new XmlTextReader(new StringReader(sb.ToString()));
MemoryStream ms = new MemoryStream();
XmlSerializer ser = new XmlSerializer(ms.GetBuffer().GetType());
MemoryStream ms1 = new MemoryStream((byte[])ser.Deserialize(xrw));
FileStream fs = new FileStream("c:\\a." + fileEx, FileMode.CreateNew);
ms1.WriteTo(fs);
fs.Close();
ms1.Close();
ms.Close();
xrw.Close();
-------------------------------------
#region 保存 图像信息
XmlElement Images = doc.CreateElement("Images");
XmlAttribute imgcount = doc.CreateAttribute("Count");
imgcount.InnerText = imgFileName.Length.ToString();
Images.Attributes.Append(imgcount);
for (int i = 0; i < imgFileName.Length; i++)
{
XmlElement img = doc.CreateElement("image");
System.IO.FileInfo fi = new System.IO.FileInfo(imgFileName[i]);
int size = (int)fi.Length;
string type = fi.Name.Substring(fi.Name.LastIndexOf("."));
string strname = fi.Name;
// XmlElement elem = myXmlDoc.CreateElement(strname);
// 打开图片文件,利用该图片构造一个文件流
FileStream fs = new FileStream(imgFileName[i], FileMode.Open);
// 使用文件流构造一个二进制读取器将基元数据读作二进制值
BinaryReader br = new BinaryReader(fs);
byte[] imageBuffer = new byte[br.BaseStream.Length];
br.Read(imageBuffer, 0, Convert.ToInt32(br.BaseStream.Length));
string textString = System.Convert.ToBase64String(imageBuffer);
fs.Close();
br.Close();
img.InnerText = textString;
XmlAttribute ImgAttributesName = doc.CreateAttribute("Name");
ImgAttributesName.InnerText = strname.ToLower().ToString().Substring(0,strname.ToString().Length - 4);
XmlAttribute ImgAttributesSize = doc.CreateAttribute("Size");
ImgAttributesSize.InnerText = size.ToString();
XmlAttribute ImgAttributesType = doc.CreateAttribute("Type");
ImgAttributesType.InnerText = strname.ToLower().ToString().Substring(strname.ToString().Length - 3);
img.Attributes.Append(ImgAttributesSize);
img.Attributes.Append(ImgAttributesName);
img.Attributes.Append(ImgAttributesType);
Images.AppendChild(img);
}
EMRRepInfo.AppendChild(Images);
#endregion
--------------------------------------------------
以下代码来自:http://blog.csdn.net/marquess/archive/2008/07/29/2732629.aspx
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Drawing.Imaging;
namespace base64_img
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//图片 转为 base64编码的文本
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog();
dlg.Title = "选择要转换的图片";
dlg.Filter = "Image files (*.jpg;*.bmp;*.gif)|*.jpg*.jpeg;*.gif;*.bmp|AllFiles (*.*)|*.*";
if (DialogResult.OK == dlg.ShowDialog())
{
ImgToBase64String(dlg.FileName);
}
}
//图片 转为 base64编码的文本
private void ImgToBase64String(string Imagefilename)
{
try
{
Bitmap bmp = new Bitmap(Imagefilename);
this.pictureBox1.Image = bmp;
FileStream fs = new FileStream(Imagefilename + ".txt", FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
MemoryStream ms = new MemoryStream();
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] arr = new byte[ms.Length];
ms.Position = 0;
ms.Read(arr, 0, (int)ms.Length);
ms.Close();
String strbaser64 = Convert.ToBase64String(arr);
sw.Write(strbaser64);
sw.Close();
fs.Close();
MessageBox.Show("转换成功!");
}
catch (Exception ex)
{
MessageBox.Show("ImgToBase64String 转换失败\nException:" + ex.Message);
}
}
//base64编码的文本 转为 图片
private void button2_Click(object sender, EventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog();
dlg.Title = "选择要转换的base64编码的文本";
dlg.Filter = "txt files|*.txt";
if (DialogResult.OK == dlg.ShowDialog())
{
Base64StringToImage(dlg.FileName);
}
}
//base64编码的文本 转为 图片
private void Base64StringToImage(string txtFileName)
{
try
{
FileStream ifs = new FileStream(txtFileName, FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(ifs);
String inputStr = sr.ReadToEnd();
byte[] arr = Convert.FromBase64String(inputStr);
MemoryStream ms = new MemoryStream(arr);
Bitmap bmp = new Bitmap(ms);
bmp.Save(txtFileName + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
//bmp.Save(txtFileName + ".bmp", ImageFormat.Bmp);
//bmp.Save(txtFileName + ".gif", ImageFormat.Gif);
//bmp.Save(txtFileName + ".png", ImageFormat.Png);
ms.Close();
sr.Close();
ifs.Close();
this.pictureBox1.Image = bmp;
MessageBox.Show("转换成功!");
}
catch (Exception ex)
{
MessageBox.Show("Base64StringToImage 转换失败\nException:"+ex.Message);
}
}
}
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/heyu1000/archive/2009/09/09/4534268.aspx
分享到:
相关推荐
XML文件序列化是指将程序中的对象转换为XML格式的字符串或文件的过程。这个过程通常发生在我们需要将内存中的数据持久化到磁盘上,或者准备通过网络发送数据时。序列化有助于将复杂的对象结构转化为简单的文本格式,...
本文将深入探讨C#中的XML序列化和反序列化技术,包括如何将XML文档解析为对象,以及如何将对象转换回XML文档进行存储。我们将详细讲解三种方法,涵盖从XML节点获取键值对(KV值)到处理对象数组和节点标签组合的反...
当你有一个对象实例,想要将其保存到XML文件或通过网络发送时,XML序列化就非常有用。 在`CustomXmlSerializer.cs`这个文件中,很可能包含了一个自定义的序列化器类,它扩展了标准的XmlSerializer类,提供了更高级...
【JAVA对象序列化保存为XML文件的工具类】 在Java编程中,对象序列化是一种将对象的状态转换为字节流的过程,以便可以存储或在网络上传输。而在反序列化时,这个字节流又可以恢复为原来的对象。Java提供了一个方便...
在C#编程中,序列化和反序列化是将对象的状态转换为可存储或传输的形式,然后恢复为原始对象的过程。XML(eXtensible Markup Language)是一种结构化的数据格式,常用于数据交换和持久化。本文将详细介绍如何在C#中...
序列化XML文件的基本步骤如下: 1. 定义一个需要序列化的类,为类的属性添加特性如[XmlElement],[XmlAttribute]等,以控制XML元素和属性的生成。 ```csharp [Serializable] public class Person { [XmlElement(...
XML序列化是将对象的状态转换为XML格式的过程,这样可以将数据保存到文件或通过网络进行传输。反序列化则是将XML数据恢复为原始对象结构的过程。这两个操作在编程中非常常见,尤其是在需要跨平台或跨语言传递数据时...
XML文件序列化是将对象的状态转换为XML格式的过程,以便可以存储或在网络上传输。这一过程在编程中尤其重要,因为它允许数据持久化,即将内存中的对象转化为可以在稍后时间重新加载和使用的文件。XML因其结构清晰、...
Xml序列化与反序列化是.NET框架中一种重要的数据转换技术,主要应用于将对象的状态转换成XML格式的字符串,便于存储或传输,同时也能够将XML数据还原为对象。在C#编程中,这一功能通常通过System.Xml.Serialization...
在VB.NET编程环境中,XML和JSON序列化与反序列化是常见的数据处理技术,用于将对象转换为文本格式(XML或JSON),以便于存储、传输和解析。这两者都是轻量级的数据交换格式,广泛应用于Web服务和客户端应用程序之间...
在Android开发中,XML序列化是将对象转换为XML格式的过程,以便存储或通过网络传输。反之,XML反序列化则是将XML数据恢复为对象的过程。"12xml序列化器"可能是某个特定的库或者实现,旨在简化Android开发者在XML序列...
// 反序列化XML文件到对象 using (StreamReader reader = new StreamReader("person.xml")) { person = (Person)serializer.Deserialize(reader); } ``` **XML增删改查** 在XML文件中进行增删改查操作,我们通常...
XML文件序列化是C#编程中一个重要的概念,它涉及到数据的存储和恢复。XML(eXtensible Markup Language)是一种结构化的数据表示语言,常用于在不同的系统间交换数据或者持久化对象的状态。在C#中,XML序列化允许...
在.NET框架中,XML序列化和反序列化是将对象的状态转换为XML文档,以及将XML文档还原为等效对象的过程。这对于数据持久化、网络传输或者存储在XML格式的配置文件中非常有用。本例以C#语言为基础,结合PLCOpen标准,...
在.NET框架中,C#是一种常用的...通过以上技术,你可以实现用户配置信息的序列化存储,例如,将用户设置保存为XML或JSON文件,然后在应用程序启动时加载这些设置。附带的源码可能展示了如何在实际项目中应用这些概念。
// 反序列化XML字符串回对象 Person deserializedPerson = (Person) xstream.fromXML(xml); System.out.println(deserializedPerson); } } class Person { private String firstName; private String ...
在本文中,我们将探讨如何通过自定义方式实现Font和Color在XML序列化中的应用。 首先,让我们了解什么是Font和Color。Font对象在C#中代表了文本的外观,包括字体名称、大小、样式(如粗体、斜体)等属性。而Color...
在编程领域,序列化是一种将对象的状态转换为可存储或可传输的形式的过程。这通常涉及到将数据结构或对象转换成字节流,以便可以写入磁盘、存储在网络中或者通过网络发送。在Delphi中,序列化是通过TStream接口实现...
3. **开始序列化**:调用`startDocument()`方法来初始化XML文档,通常会指定XML版本和编码(如"UTF-8")。 4. **定义元素**:使用`startTag()`方法开始一个XML元素。这个方法需要两个参数:命名空间(通常为空)和...
5. **反序列化XML到Java对象**:将XML字符串转换回`Person`对象。 ```java try { Person deserializedPerson = mapper.readValue(xmlString, Person.class); Log.d("XMLDeserialization", "Name: " + ...