杨友山 今天看了篇将图片转为二进制保存至xml的文章,感觉这种方法还是有些用处的,虽然转为xml后文件反而比原图片大了。但是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; } } 原图: |
|