王朝网络
分享
 
 
 

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

王朝c#·作者佚名  2006-05-27
宽屏版  字体: |||超大  

因为最近要做的项目中,我要通过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);

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有