因为最近要做的项目中,我要通过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);
}
.Net中将图片数据保存到XML文档
来源:搜站长搜集
作者:未知
时间:2005-09-22
点击:
最新评论共有 0 位网友发表了评论
查看所有评论
发表评论
- 赞助商连接
热点关注
- 用Asp.net实现基于XML的留
- ASP.NET创建XML Web服务全
- ASP.NET2.0中创建基于XML
- 使用c#如何读取xml文件
- .Net中将图片数据保存到XM
- HTML中的XML数据岛记录编
- 用asp.net和xml做的新闻更
- XML文件导入SQL Server 20
- Net的精髓-XML和SOAP
- 不用编程,得到一个用户QQ
- 将Access数据转换为XML格
- 用XSL.ASP编辑XML文档
- XML网络服务安全
- 利用XSLT把ADO记录集转换
- 创建存储过程的XML注释文
- 用C#与XML创建动态分层菜
- ASP.NET中的XML表单控件
- 利用XmlTextWriter类增强X
- 在DotNet里面利用XML
- SQL Server和XML的集成