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