首先我们做些准备工作:
1.在c盘下创建一个文件夹并命名为picture。里面存放一张图片(任意格式的一张)。c:/picture/001.jpg
2.在c盘下创建一个文件夹并命名为picture2.里面存放一个xml文件。c:/picture1/11.xml
在xml文件中加一个根节点(这里是为了操作的方便直接在文件中添加的,你也可以在你的代码中动态的添 加)如<picture></picture>
接下来的程序就是实现将图片001.jpg通过base64编码后储存到11.xml文件中。
先在form中拖进一个button。双击触发click事件。事件代码如下:
View Code
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 using System.IO; 10 using System.Xml; 11 namespace 图片存储xml文件 12 { 13 public partial class Form1 : Form 14 { 15 public Form1() 16 { 17 InitializeComponent(); 18 } 19 20 21 private void button1_Click(object sender, EventArgs e) 22 { 23 try 24 { 25 XmlDocument myxmldoc = new XmlDocument(); 26 myxmldoc.Load("C:/picture1/11.xml"); 27 XmlElement elem = myxmldoc.createElement_x("image"); 28 // 打开图片文件,利用该图片构造一个文件流 29 FileStream fs = new FileStream("C:/picture/001.jpg", FileMode.Open); 30 // 使用文件流构造一个二进制读取器将基元数据读作二进制值 31 BinaryReader br = new BinaryReader(fs); 32 byte[] imagebuffer = new byte[br.BaseStream.Length]; 33 br.Read(imagebuffer,0,Convert.ToInt32(br.BaseStream.Length)); 34 string textstring = System.Convert.ToBase64String(imagebuffer); 35 fs.Close(); 36 br.Close(); 37 XmlText text = myxmldoc.CreateTextNode(textstring); 38 myxmldoc.DocumentElement.AppendChild(elem); 39 myxmldoc.DocumentElement.LastChild.AppendChild(text); 40 41 42 myxmldoc.Save("C:/picture1/11.xml"); 43 44 45 MessageBox.Show("读写结束!"); 46 } 47 catch (Exception ex) 48 { 49 MessageBox.Show(ex.ToString()); 50 } 51 } 52 } 53 }
运行后打开c盘下的picture1文件夹,双击11.xml文件。看到里面除了你开始添加的picture标签以外还多出了image标签,标签里面都是你看不懂的字母。说明你已经转换成功了。
图片存好以后你需要把它读出来。以下是读出的方法,也就是解码的方法:同样的,在form里面添加一个button,双击产生click事件,事件代码如下:
View Code
1 private void button2_Click(object sender, EventArgs e) 2 { 3 try 4 { 5 int readbyte = 0; 6 int bytestoread = 1044; 7 XmlTextReader xmltxtrd = new XmlTextReader("C:/picture1/11.xml"); 8 FileStream fs = new FileStream("C:/picture1/002.jpg", FileMode.Create); 9 BinaryWriter bw = new BinaryWriter(fs); 10 byte[] base64buffer = new byte[bytestoread]; 11 while (xmltxtrd.Read()) 12 { 13 if (xmltxtrd.NodeType == XmlNodeType.Element && xmltxtrd.Name == "image") 14 { 15 do 16 { 17 readbyte = xmltxtrd.ReadBase64(base64buffer, 0, bytestoread); 18 bw.Write(base64buffer, 0, readbyte); 19 } 20 while (bytestoread <= readbyte); 21 } 22 } 23 bw.Flush(); 24 bw.Close(); 25 fs.Close(); 26 xmltxtrd.Close(); 27 28 MessageBox.Show("读写结束!"); 29 } 30 catch (Exception ex) 31 { 32 MessageBox.Show(ex.ToString()); 33 } 34 }
运行后打开c盘下的picture1文件夹,你可以看到里面多了一个002.jpg的图像文件,打开看看,这是你刚刚在picture文件下的那张图片。
个人觉的这个方法也适合wpf,试试吧!~