Windows Phone 7开发遇到的事:保存、读取图片
来源:互联网 发布:权威的时尚杂志 知乎 编辑:程序博客网 时间:2024/05/17 22:17
读取图片
图片的来源一般有3个地方:网络、独立存储和程序包。
从网络读取图片
string uri = "http://avatar.csdn.net/2/C/D/3_leons77.jpg";BitmapImage bitmapImage = new BitmapImage();bitmapImage.UriSource = new Uri(uri, UriKind.Absolute);//image是一个Image控件image.Source = bitmapImage;从网络保存图片到独立存储
string uri = "http://avatar.csdn.net/2/C/D/3_leons77.jpg";BitmapImage bitmapImage = new BitmapImage();bitmapImage.UriSource = new Uri(uri, UriKind.Absolute);//当成功下载和解码图像源后发生的委托bitmapImage.ImageOpened += new EventHandler<RoutedEventArgs>(bitmapImage_ImageOpened);//image是一个Image控件image.Source = bitmapImage;//当成功下载和解码图像源后运行下面的代码void bitmapImage_ImageOpened(object sender, RoutedEventArgs e){ //下面的代码意思是:将图片对象编码为流,再通过流把图片保存到独立存储里 using (MemoryStream memoryStream = new MemoryStream()) { WriteableBitmap writeableBitmap = new WriteableBitmap(sender as BitmapImage); Extensions.SaveJpeg(writeableBitmap, memoryStream, writeableBitmap.PixelWidth, writeableBitmap.PixelHeight, 0, 100); //文件名 string fileName = "image.jpg"; using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication()) { //先看看有没有该名字的文件,有就删除。 if (store.FileExists(fileName)) { store.DeleteFile(fileName); } using (IsolatedStorageFileStream fileStream = store.OpenFile(fileName, FileMode.OpenOrCreate, FileAccess.Write)) { using (BinaryWriter writer = new BinaryWriter(fileStream)) { writer.Write(memoryStream.GetBuffer()); } } } }}注意:只有当Image控件的Source使用BitmapImage时,BitmapImage才会去下载图片,才会执行它的ImageOpened委托。
从独立存储里读取图片
通过上面的“从网络保存图片到独立存储”,独立存储里面已经有一张image.jpg图片文件了。
//文件名string fileName = "image.jpg";using (IsolatedStorageFileStream stream = IsolatedStorageFile.GetUserStoreForApplication().OpenFile(fileName, FileMode.Open, FileAccess.Read)){ BitmapImage bitmapImage = new BitmapImage(); bitmapImage.SetSource(stream); //image是一个Image控件 image.Source = bitmapImage;}从程序包里读取图片
两种方法:
第一种最简单,用Image控件直接在XAML里面设置它的Source属性就好了。注意:图片的生成操作一定要是Resource。
第二种:
//文件名//注意:如果程序包中的图片文件是用Resource的生成操作,就要用"/程序包名;component/图片文件名"的方法才能找到文件。//如果是用内容(content)的生成操作,直接用"图片文件名"。string fileName = "/SaveLoadImage;component/y.jpg";using (Stream stream = Application.GetResourceStream(new Uri(fileName, UriKind.Relative)).Stream){ BitmapImage bitmapImage = new BitmapImage(); bitmapImage.SetSource(stream); //image是一个Image控件 image.Source = bitmapImage;}保存图片
上面已经介绍了用Image控件+BitmapImage保存图片的方法。下面是介绍直接下载图片到独立存储:
string uri = "http://avatar.csdn.net/2/C/D/3_leons77.jpg";WebClient webClient = new WebClient();webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted);webClient.OpenReadAsync(new Uri(uri, UriKind.Absolute));void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e){ if (e.Error == null && !e.Cancelled) { using (BinaryReader reader = new BinaryReader(e.Result)) { using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication()) { //文件名 string fileName = "image.jpg"; //先看看有没有该名字的文件,有就删除。 if (store.FileExists(fileName)) { store.DeleteFile(fileName); } using (IsolatedStorageFileStream fileStream = store.OpenFile(fileName, FileMode.OpenOrCreate, FileAccess.Write)) { using (BinaryWriter writer = new BinaryWriter(fileStream)) { writer.Write(reader.ReadBytes(Convert.ToInt32(e.Result.Length))); } } } } }}注意:这里用的是WebClient下载图片,如果图片过大的话,下载的时候UI就会被卡死。最好用HttpWebRequst异步下载。我之前的博客《WP7(Windows Phone)开发遇到的事:使用get、post请求》有写怎么使用HttpWebRequst。
- Windows Phone 7开发遇到的事:保存、读取图片
- Windows Phone 保存、读取图片
- Windows Phone 7开发遇到的事:解析JSON
- Windows Phone 7开发遇到的事:WebBrowser加载本地带图片的html、解决中文乱码
- windows Phone 7 保存图片到MediaLibrary
- windows Phone 7 保存图片到MediaLibrary
- windows Phone 7 保存图片到MediaLibrary
- Windows Phone 7开发遇到的事:使用get、post请求
- Windows 8.1 & Windows Phone 开发环境安装遇到的问题
- windows phone 开发中sql数据库 wcf服务与windows phone 8 之间图片二进制流存储与读取的问题
- Windows Phone实用开发技巧(1):保存图片及加载图片
- Windows Phone开发如何保存铃声?
- Windows Phone开发遇到的一些事(一 饼状图,扇形,弧线等)
- Windows Phone 7(WP7)开发 读取本地资源文件
- Windows Phone 7 截取当前屏幕保存图像的代码
- Windows Phone 7 开发环境的搭建
- Windows Phone 7 开发环境的搭建
- Windows Phone 数据的保存和恢复
- Java的基本类型
- VC命令行编译参数介绍
- 开始使用Mac OS X——写给Mac新人
- 《Unix & Linux 大学教程》 - 第二十二章(二) 学习笔记
- JAVA正则忽略大小写
- Windows Phone 7开发遇到的事:保存、读取图片
- Contact Selector in InfoPath 2007 and 2010
- VC++中使用内存映射文件处理大文件
- python学习笔记
- SSRS:Reporting Services报表制作技巧
- <jsp:include>和<%@include%>的区别
- 南京去年2万多张驾驶证过期未审-驾驶证-过期
- How To: Implement a rating scale in InfoPath 2010
- IHTMLElement和IHTMLElement2接口