分享

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

 Jcstone 2014-07-25

杨友山

  今天看了篇将图片转为二进制保存至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


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多