C#将图片转换二进制保存至Xml

 

今天看了篇将图片转为二进制保存至xml的文章,感觉这种方法还是有些用处的,虽然转为xml后文件反而比原图片大了。但是xml毕竟方便传输,并且出错的机会也小一些。贴代码看看。
说明:
TPFileName.XmlName——xml的路径和名称。

TPFileName.PictureName——原图片的路径和名称。

TPFileName.XmlPictureName——xml转换的图片的路径和地址。

 public class TPMainFormManager
    {
        static bool CreateXmlDocument()
        {
            try
            {
                if (File.Exists(TPFileName.XmlName))
                {
                    File.Delete(TPFileName.XmlName);
                }

                XmlTextWriter xmlTextWriter = new XmlTextWriter(TPFileName.XmlName, Encoding.UTF8);

                xmlTextWriter.Formatting = Formatting.Indented;

                xmlTextWriter.WriteStartDocument();

                xmlTextWriter.WriteStartElement("PictureItems");

                xmlTextWriter.WriteEndElement();

                xmlTextWriter.WriteEndDocument();

                xmlTextWriter.Close();

                return true;
            }
            catch (Exception ex)
            {
                Debug.Assert(false, ex.Message);

                return false;
            }
        }

        public static void ChangePicToXml()
        {
            if (CreateXmlDocument())
            {
                XmlDocument myXmlDoc = new XmlDocument();

                myXmlDoc.Load(TPFileName.XmlName);

                XmlElement xmlElement = myXmlDoc.CreateElement("image");

                FileStream fileStream = new FileStream(TPFileName.PictureName, FileMode.Open);

                BinaryReader binaryReader = new BinaryReader(fileStream);

                byte[] imageBuffer = new byte[binaryReader.BaseStream.Length];

                binaryReader.Read(imageBuffer, 0, Convert.ToInt32(binaryReader.BaseStream.Length));

                string textString = System.Convert.ToBase64String(imageBuffer);

                fileStream.Close();

                binaryReader.Close();

                XmlText text = myXmlDoc.CreateTextNode(textString);

                myXmlDoc.DocumentElement.AppendChild(xmlElement);

                myXmlDoc.DocumentElement.LastChild.AppendChild(text);

                myXmlDoc.Save(TPFileName.XmlName);
            }
        }

        public static Image GetXmlPicture()
        {
            int readByte = 0;

            int bytesToRead = 1024;

            XmlTextReader xmlTextReader = new XmlTextReader(TPFileName.XmlName);

            FileStream fileStream = new FileStream(TPFileName.PictureName, FileMode.Create);

            BinaryWriter binaryWriter = new BinaryWriter(fileStream);

            byte[] base64buffer = new byte[bytesToRead];

            while (xmlTextReader.Read())
            {
                if (xmlTextReader.NodeType == XmlNodeType.Element && xmlTextReader.Name == "image")
                {

                    do
                    {
                        readByte = xmlTextReader.ReadBase64(base64buffer, 0, bytesToRead);

                        binaryWriter.Write(base64buffer, 0, readByte);

                    } while (bytesToRead <= readByte);
                }
            }

            binaryWriter.Flush();

            binaryWriter.Close();

            fileStream.Close();

            xmlTextReader.Close();

            Image image = Image.FromFile(TPFileName.PictureName);

            return image;
        }
    }

原图:
 
Xml转换图片后
   
详细工程:http://download.csdn.net/detail/yysyangyangyangshan/4082253

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值