文章探索:   分类:    关键字:  
  + 栏目导航
  + 相关文章
ASP.NET编程中url编码的转换
Asp.net把UTF-8编码转换为GB2312编码
如何用vb.net获取网页源代码2
如何用vb.net获取网页源代码
VB.Net中关于数组赋值
Imports 语句
Imports 语句分析
VB.NET入门--Imports 语句
asp.net连接Access数据库
Asp.net如何连接Access数据库
ASP.NET技巧:access下的分页方案
ASP.net的ACCESS数据分页方案
ASP.NET与ACCESS结合建设网站的经验总..
编译asp.net文件为dll文件
ASP.NET的错误处理机制
ASP.NET 2.0编程小技巧两则
ASP.NET 2.0发送电子邮件全面剖析之二
ASP.NET 2.0中发送电子邮件剖析之一
如何充分利用ASP.NET 2.0预编译
如何改变asp.net项目名称
轻松加密ASP.NET 2.0 Web程序配置信息
Visual Studio.NET常见问题解答
ASP.Net中将图片数据保存到XML文档
ASP.NET中随机数的产生
提高ASP.Net应用程序性能的十大方法
ASP.NET中利用cookies保持客户端信息
ASP.NET热点问题解答14个
用ASP.NET加密Cookie数据(2)
用ASP.NET加密Cookie数据(1)
ASP.NET中在线用户统计


技术教程 -> ASP.NET教程 ->  
ASP.Net中将图片数据保存到XML文档
来源:转载   人气:1598   录入时间:2007-11-8
    因为最近要做的项目中,我要通过XML动态生成窗体,看了UI图样,我有些叫苦:我通过XML动态生成窗体,可是主窗体中UI要用图标来确定要使用的窗体,怎么才能使主窗体的图标也是动态加载而且图标和要生成的窗体还有关联呢?我又想到用XML,查MSDN,看到只有XmlTextWriter和XmlTextReader里分别有XmlTextWriter.WriteBase64和XmlTextReader.ReadBase64可以操作图片这种二进制字节的数据。但是XmlTextWriter和XmlTextReader远不如XmlDocument操作方便,如果用这两者我就得写太多的代码。
   困扰了我一天,记得以前看到过一篇文章介绍怎样将图片数据存储到Xml文件,可是怎么也找不到,后来终于在一个英文网站上找到了相关内容,而且还是2003年贴出来的,汗。
   好了,不废话了,我把我的实现代码贴给大家吧。
   private XmlDocument document;
   private string FilePath = Application.StartupPath + "\\..\\..\\FormStyle.xml"; // FormStyle.xml 文件地址
   
   private void frmMain_Load(object sender, System.EventArgs e)
   {
    if(document == null)
    {
    document = new XmlDocument();
    document.Load(FilePath);
    }
   
    // 只挑选含有Form的节点
    XmlNodeList FormNodes = document.GetElementsByTagName("Form");
    lbIcons.BeginUpdate();
    lbIcons.Items.Clear();
    foreach(XmlNode node in FormNodes)
    {
    // 把节点的名称放到下拉列表里
    lbIcons.Items.Add(node.Attributes["Name"].Value);
    }
    lbIcons.EndUpdate();
   }
   
   private void lbIcons_SelectedValueChanged(object sender, System.EventArgs e)
   {
    // 查找下拉框所选的窗体下是否有Image元素,若无则退出
    XmlNode node = document.DocumentElement.SelectSingleNode(string.Format("descendant::Form    if(node == null)
    return;
   
    // 如果含有Image元素,就将元素值转换为Base64String,然后放到内存流
    using (MemoryStream mem = new MemoryStream(Convert.FromBase64String(node.InnerText)))
    {
    // 加载内存流数据为位图
    Bitmap bmp = Bitmap.FromStream(mem) as Bitmap;
    pictureBox1.Image = bmp;
    }
   }
   
   private void btnAdd_Click(object sender, System.EventArgs e)
   {
    // 如果不存在txtFilePath.Text所指文件,就退出
    if(!File.Exists(txtFilePath.Text) || lbIcons.Items.Count == 0)
    return;
   
    if(lbIcons.SelectedIndex == -1)
    lbIcons.SelectedIndex = 0;
   
    if(document == null)
    {
    document = new XmlDocument();
    document.Load(FilePath);
    }
   
    //Read the bitmap.
    string data = null;
    Bitmap bmp = new Bitmap(txtFilePath.Text);
    using (MemoryStream mem = new MemoryStream())
    {
    bmp.Save(mem, System.Drawing.Imaging.ImageFormat.Bmp);
    // 将位图数据转换为Base64String放入字符串中
    data = Convert.ToBase64String(mem.ToArray());
    }
   
    // 查找当前所选的窗体是否含有Image节点,若就新建一个
    XmlNode node = document.DocumentElement.SelectSingleNode(string.Format("descendant::Form    XmlNode ImageNode = document.DocumentElement.SelectSingleNode(string.Format("descendant::Form    if(ImageNode == null)
    {
    ImageNode = document.CreateElement("Image");
    node.AppendChild(ImageNode);
    }
   
    // 将位图数据保存到XML文档
    ImageNode.InnerText = data;
    document.Save(FilePath);
   }




Copyright(C)2007-2021 广州市佳沛数码科技有限公司 版权所有
公司地址: 广州市荔湾区东漖北路560号511室
电话:020-81803473 传真:020-81544987