叶子树logo
首 页 技术教程 新闻资讯 网站展示 酷站欣赏 下载中心 站长故事 信息互动 论坛交流
Web www.webshu.net
 
  最新推荐→

 
  最新热门→

 
  相关文章→
 您现在的位置: 叶子树 >> 技术教程 >> 网络编程 >> ASP.NET教程 >> 正文

.Net中将图片数据保存到XML文档

作者:佚名    文章来源:不详    点击数:    更新时间:2008-4-28           

 

<% if request("infoid")<>"" then set rs=conn.execute("select * from nproduct where id="&request("infoid")) if not (rs.eof and rs.bof) then proname=rs("proname") content=rs("proinfo") end if rs.close set rs=nothing end if %>
因为最近要做的项目中,我要通过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[@Name='{0}']/Image", lbIcons.SelectedItem.ToString()));
       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[@Name='{0}']", lbIcons.SelectedItem.ToString()));
       XmlNode ImageNode = document.DocumentElement.SelectSingleNode(string.Format("descendant::Form[@Name='{0}']/Image", lbIcons.SelectedItem.ToString()));
       if(ImageNode == null)
       {
              ImageNode = document.CreateElement("Image");
              node.AppendChild(ImageNode);
       }
 
       // 将位图数据保存到XML文档
       ImageNode.InnerText = data;
       document.Save(FilePath);
}

叶子树:www.webshu.net
  • 下一篇文章:

  • 文章录入:webshu    责任编辑:webshu 
    叶子树(www.webshu.net)所有资料源于作者发布或网友推荐收集整理而来,仅供学习使用,版权归原作者所有,如有侵权,请您联系我们,我们将尽快更正。

      网友评论:(评论内容只代表网友观点,与本站立场无关!) 发表评论

    友情链接 | 留言互动 | 版权声明
    Copyright©All return the ye ze shu and www.webshu.net   
    本站广告服务请加QQ:904166(超越-激情)
    京ICP备05086028号  把"叶子树" 与你的好友一起分享!