private readonly static string xmlFile = @"d:\showXml.xml";
private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                string fileName = @"D:\121.PNG";                FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Read);
                byte[] image = new byte[fs.Length];
                fs.Read(image, 0, System.Convert.ToInt32(fs.Length));
                fs.Close();
                writeToXML(image);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                //
            }
        }        private void button2_Click(object sender, EventArgs e)
        {
            readXML();
        }        private void readXML()
        {
            XmlDocument xmldoc = new XmlDocument();
            string fileContent = File.ReadAllText(xmlFile).Trim();
            xmldoc.LoadXml(fileContent);
            string picStr = xmldoc.SelectSingleNode("*/message_id").InnerText;
            Byte[] temp = Encoding.ASCII.GetBytes(picStr);
            MemoryStream buf = new MemoryStream(temp);
            Image image = Image.FromStream(buf, true);
            pictureBox1.Image = image;
        }        private void writeToXML(byte[] imageByte)
        {
            XmlDocument xmlDoc = new XmlDocument();
            string fileContent = File.ReadAllText(xmlFile).Trim();
            xmlDoc.LoadXml(fileContent);
            XmlNode xe = xmlDoc.SelectSingleNode("*/message_id");
            xe.InnerText = Encoding.ASCII.GetString(imageByte);
            xmlDoc.Save(xmlFile);
        }
XML:
<?xml version="1.0" encoding="UTF-8"?>
<message>
  <message_id></message_id>
</message>

解决方案 »

  1.   

    本帖最后由 net_lover 于 2012-02-21 20:22:40 编辑
      

  2.   

    抱歉,之前无法回贴,问题是我把图片转成二进制存到XML是没问题的,可是从XML里面取出来的时候,Image image = Image.FromStream(buf, true);
    这一句总会报无效的参数
      

  3.   

    private void readXML()
            {
                XmlDocument xmldoc = new XmlDocument();
                string fileContent = File.ReadAllText(xmlFile).Trim();
                xmldoc.LoadXml(fileContent);
                string picStr = xmldoc.SelectSingleNode("*/message_id").InnerText;
                int numberChars = picStr.Length;
                byte[] bytes = new byte[numberChars / 2];
                for (int i = 0; i < numberChars; i += 2)
                {
                    bytes[i / 2] = Convert.ToByte(picStr.Substring(i, 2), 16);
                }            MemoryStream buf = new MemoryStream(bytes);
                Image image = Image.FromStream(buf, true);
                pictureBox1.Image = image;
            }        private void writeToXML(byte[] imageByte)
            {
                XmlDocument xmlDoc = new XmlDocument();
                string fileContent = File.ReadAllText(xmlFile).Trim();
                xmlDoc.LoadXml(fileContent);
                XmlNode xe = xmlDoc.SelectSingleNode("*/message_id");
                StringBuilder sb = new StringBuilder();
                foreach (byte b in imageByte)
                {
                    sb.AppendFormat("{0:x2}", b);
                }
                xe.InnerText = sb.ToString();
                xmlDoc.Save(xmlFile);
            }
    这样读跟写都没有问题,可是生成的XML会比图片大一倍,请问有什么办法解决么?只能用二进制来存,不能用base64
      

  4.   

    利用ICSharpCode.SharpZipLib.dll 压缩?为什么要把png转换成xml文件?