C# 如何将image图片保存在xml中

做了个头像选择,功能都实现了。
imagelist是用resourse文件中的
Image imageTemp = Properties.Resources.P011;
imageList1.Images.Add(imageTemp);

pictureBox1.Image = imageList1.Images[ListView1.SelectedItems[0].ImageIndex];
用这个来功能实现的
现在想把Properties.Resources.P011 这个存储在xml中,下次打开程序,就可以直接放在picture box中了。

如何实现?或者其他实现方式?
就是已经选择的图片,下次能直接在程序中显示,以什么方式存储在xml中?

我把图片放在resource里了,通过类调用的,没有图片路径,或者怎么获取图片路径?
Image imageTemp = Properties.Resources.P011 我是这么获得图片的。怎么保存到xml中啊?
我也不想把图片的数据存进去。

直接反射获取流

在资源文件里,就默认是在程序里面了,不用单独在保存,直接用就行
像这样的:  this.pictureBox1.Image = global::WindowsFormsApp9.Properties.Resources.图片1;

是这样的,我做了个登录界面,里面可以选择头像,头像选择好了,我得保存下来是哪个索引,下一次打开,就不用选择了。直接从resource中打开就好了。
现在碰到2个问题,我是将resource中图片做成了imagelist,然后listview加载,从listview中选中,这么我只能得到imagelist中的索引,那么怎么通过这个索引得到properties.resources.图片这个信息呢?

如果必须要存在xml中的话,用base64编码成字符串。

把图片的二进制数据转换成base64格式保存就可以。

搞定了,不是很完美
在listviewitem new的时候,加了个tag里面保存了resource中的图片名,比如P011
然后image就是

Image tryit = (Image)Properties.Resources.ResourceManager.GetObject((string)ListView1.SelectedItems[0].Tag, null);
pictureBox2.Image = tryit;

就能访问了,这个tag的值我就能存储到xml中啦。

还有人有更好的办法么?不用手动设置tag,就能得到imagelist中的resource中的图片名。
用过imageList1.Images.Keys[0],里面是空,不知道什么原因。

例如:
Image imageTemp1 = Properties.Resources.P011;
Image imageTemp2 = Properties.Resources.P012;
Image imageTemp3 = Properties.Resources.P013;
imageList1.Images.Add(imageTemp1);
imageList1.Images.Add(imageTemp2);
imageList1.Images.Add(imageTemp3);

我设置了imageTemp2为头像,那只需要保存imageList1中的索引[1];下次打开我只读取这个索引[1];
调用imageList1[1]即为imageTemp2;


和你tag差不多

            //图像不大的话,可以把图像转为流,然后base64编码,最后存在xml节点中
            MemoryStream ms = new MemoryStream();
            Image aa = Image.FromFile("d:\\aa.png");
            aa.Save(ms, ImageFormat.Png);

            byte[] bytes = ms.GetBuffer();
            string xmlValue = Convert.ToBase64String(bytes);
            ms.Dispose();

            //打开时可以通过流再还原图片
            bytes = Convert.FromBase64String(xmlValue);
            MemoryStream ms1 = new MemoryStream(bytes);
            Image bb = Image.FromStream(ms1);
            ms1.Dispose();

有2个办法解决此问题
1个,就是在生成listviewItem的时候,在tag里面加上resource中图片的名字比如P01, tag=P01,然后把P01保存到xml中
下次打开xml读取P01,然后 
(Image)Properties.Resources.ResourceManager.GetObject(“P01”, null); 就能得到
小蜜蜂论坛发帖机resource图片了

还有个,就是自己累点,直接把resouce中的图片重命名了,和index一样。那么保存的index,下次一样打开。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值