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

来源:互联网 发布:我的世界手机版js天堂 编辑:程序博客网 时间:2024/04/28 21:27
 

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

原创粉丝点击