zoukankan      html  css  js  c++  java
  • Windows Phone 7开发遇到的事:保存、读取图片

    http://blog.csdn.net/leons77/article/details/8085662

    读取图片

    图片的来源一般有3个地方:网络、独立存储和程序包。

    从网络读取图片

    [csharp] view plaincopy
     
    1. string uri = "http://avatar.csdn.net/2/C/D/3_leons77.jpg";  
    2.   
    3. BitmapImage bitmapImage = new BitmapImage();  
    4. bitmapImage.UriSource = new Uri(uri, UriKind.Absolute);  
    5.   
    6. //image是一个Image控件  
    7. image.Source = bitmapImage;  

    从网络保存图片到独立存储

    [csharp] view plaincopy
     
    1. string uri = "http://avatar.csdn.net/2/C/D/3_leons77.jpg";  
    2.   
    3. BitmapImage bitmapImage = new BitmapImage();  
    4. bitmapImage.UriSource = new Uri(uri, UriKind.Absolute);  
    5. //当成功下载和解码图像源后发生的委托  
    6. bitmapImage.ImageOpened += new EventHandler<RoutedEventArgs>(bitmapImage_ImageOpened);  
    7.   
    8. //image是一个Image控件  
    9. image.Source = bitmapImage;  
    [csharp] view plaincopy
     
    1. //当成功下载和解码图像源后运行下面的代码  
    2. void bitmapImage_ImageOpened(object sender, RoutedEventArgs e)  
    3. {  
    4.     //下面的代码意思是:将图片对象编码为流,再通过流把图片保存到独立存储里  
    5.     using (MemoryStream memoryStream = new MemoryStream())  
    6.     {   
    7.         WriteableBitmap writeableBitmap = new WriteableBitmap(sender as BitmapImage);  
    8.         Extensions.SaveJpeg(writeableBitmap, memoryStream, writeableBitmap.PixelWidth, writeableBitmap.PixelHeight, 0, 100);  
    9.   
    10.         //文件名  
    11.         string fileName = "image.jpg";  
    12.   
    13.         using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())  
    14.        {  
    15.            //先看看有没有该名字的文件,有就删除。  
    16.            if (store.FileExists(fileName))  
    17.            {  
    18.                store.DeleteFile(fileName);  
    19.            }  
    20.   
    21.            using (IsolatedStorageFileStream fileStream = store.OpenFile(fileName, FileMode.OpenOrCreate, FileAccess.Write))  
    22.            {  
    23.                 using (BinaryWriter writer = new BinaryWriter(fileStream))  
    24.                {  
    25.                    writer.Write(memoryStream.GetBuffer());  
    26.                }  
    27.            }  
    28.         }  
    29.     }  
    30. }  

    注意:只有当Image控件的Source使用BitmapImage时,BitmapImage才会去下载图片,才会执行它的ImageOpened委托。

    从独立存储里读取图片

    通过上面的“从网络保存图片到独立存储”,独立存储里面已经有一张image.jpg图片文件了。

    [csharp] view plaincopy
     
    1. //文件名  
    2. string fileName = "image.jpg";  
    3.   
    4. using (IsolatedStorageFileStream stream = IsolatedStorageFile.GetUserStoreForApplication().OpenFile(fileName, FileMode.Open, FileAccess.Read))  
    5. {  
    6.     BitmapImage bitmapImage = new BitmapImage();  
    7.     bitmapImage.SetSource(stream);  
    8.   
    9.     //image是一个Image控件  
    10.     image.Source = bitmapImage;  
    11. }  

    从程序包里读取图片

    两种方法:

    第一种最简单,用Image控件直接在XAML里面设置它的Source属性就好了。注意:图片的生成操作一定要是Resource。

     

    第二种:

    [csharp] view plaincopy
     
    1. //文件名  
    2. //注意:如果程序包中的图片文件是用Resource的生成操作,就要用"/程序包名;component/图片文件名"的方法才能找到文件。  
    3. //如果是用内容(content)的生成操作,直接用"图片文件名"。  
    4. string fileName = "/SaveLoadImage;component/y.jpg";  
    5.   
    6. using (Stream stream = Application.GetResourceStream(new Uri(fileName, UriKind.Relative)).Stream)  
    7. {  
    8.     BitmapImage bitmapImage = new BitmapImage();  
    9.     bitmapImage.SetSource(stream);  
    10.   
    11.     //image是一个Image控件  
    12.     image.Source = bitmapImage;  
    13. }  

    保存图片

    上面已经介绍了用Image控件+BitmapImage保存图片的方法。下面是介绍直接下载图片到独立存储:

    [csharp] view plaincopy
     
    1. string uri = "http://avatar.csdn.net/2/C/D/3_leons77.jpg";  
    2.   
    3. WebClient webClient = new WebClient();  
    4. webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted);  
    5. webClient.OpenReadAsync(new Uri(uri, UriKind.Absolute));  
    [csharp] view plaincopy
     
    1. void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)  
    2. {  
    3.     if (e.Error == null && !e.Cancelled)  
    4.     {  
    5.         using (BinaryReader reader = new BinaryReader(e.Result))  
    6.         {  
    7.             using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())  
    8.            {  
    9.                //文件名  
    10.                string fileName = "image.jpg";  
    11.   
    12.                //先看看有没有该名字的文件,有就删除。  
    13.                if (store.FileExists(fileName))  
    14.                {  
    15.                    store.DeleteFile(fileName);  
    16.                }  
    17.   
    18.                using (IsolatedStorageFileStream fileStream = store.OpenFile(fileName, FileMode.OpenOrCreate, FileAccess.Write))  
    19.                {  
    20.                    using (BinaryWriter writer = new BinaryWriter(fileStream))  
    21.                    {  
    22.                        writer.Write(reader.ReadBytes(Convert.ToInt32(e.Result.Length)));  
    23.                    }  
    24.                 }  
    25.             }  
    26.         }  
    27.     }  
    28. }  

    注意:这里用的是WebClient下载图片,如果图片过大的话,下载的时候UI就会被卡死。最好用HttpWebRequst异步下载。我之前的博客《WP7(Windows Phone)开发遇到的事:使用get、post请求》有写怎么使用HttpWebRequst

  • 相关阅读:
    在没有备份的情况下重新创建丢失的数据文件 (Doc ID 1149946.1)
    How to recover a skipped tablespace after an incomplete recovery? (Doc ID 1561645.1)
    RMAN DUPLICATE DATABASE with SET NEWNAME failed: RMAN-05501 RMAN-05517 (Doc ID 387093.1)
    Rman Enhancements(增强) In Oracle 11g. (Doc ID 1115423.1)
    Resolving RMAN-06023 or RMAN-06025 (Doc ID 2038119.1)
    Checklist for an RMAN Restore (Doc ID 1554636.1)
    Recover With Until Time fails With RMAN-20207 When Time Is Before Last RESETLOGS (Doc ID 159405.1)
    ODA: After Apply ODA 12.2.1.2.0 Patch, Unable to Create TableSpace Due to [ORA-15001: diskgroup "DATA" does not exist or is not mounted | ORA-15040: diskgroup is incomplete] (Doc ID 2375553.1)
    How to restore and recover a database from an RMAN backup. (Doc ID 881395.1)
    How To Restore Rman Backups On A Different Node When The Directory Structures Are Different (Doc ID 419137.1)
  • 原文地址:https://www.cnblogs.com/xlyg-14/p/4950473.html
Copyright © 2011-2022 走看看