c# 图片如何保存到xml文件

首先我们做些准备工作:

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,试试吧!~
原文地址:https://www.cnblogs.com/rocblog/p/3030492.html