windows phone 7 获取手机图片库中图片

来源:互联网 发布:儿童网络教学 编辑:程序博客网 时间:2024/04/28 14:27
WP7 获取图片库信息 
前置条件:手机和电脑未连接或连接电脑Zune软件关闭(与Zune软件连接时不允许访问图片库); 版本7.1

获取手机图片库图片的两种方式: PhotChooserTask方式和XNA方式进行获取
   PhotChooserTask获取

引用命名空间
  1. //引用
  2. //PhotoChooserTask类用到
  3. using Microsoft.Phone.Tasks;
  4. //BitmapImage类用到
  5. using System.Windows.Media.Imaging;
   隐藏文件代码:


  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Net;
  5. using System.Windows;
  6. using System.Windows.Controls;
  7. using System.Windows.Documents;
  8. using System.Windows.Input;
  9. using System.Windows.Media;
  10. using System.Windows.Media.Animation;
  11. using System.Windows.Shapes;
  12. using Microsoft.Phone.Controls;
  13. //引用
  14. //PhotoChooserTask类用到
  15. using Microsoft.Phone.Tasks;
  16. //BitmapImage类用到
  17. using System.Windows.Media.Imaging;

  18. namespace ChoosePhoto
  19. {
  20.     public partial class MainPage : PhoneApplicationPage
  21.     {
  22.         //实例化图片选择器
  23.         PhotoChooserTask photoChoose = new PhotoChooserTask();
  24.         // 构造函数
  25.         public MainPage()
  26.         {
  27.             InitializeComponent();
  28.             //设置的委托事件
  29.             photoChoose.Completed += new EventHandler<PhotoResult>(photoChoose_Completed);
  30.         }
  31.         //事件处理完得到图片
  32.         void photoChoose_Completed(object sender, PhotoResult e)
  33.         {
  34.             if (e.TaskResult==TaskResult.OK)
  35.             {
  36.                 //实例化位图
  37.                 BitmapImage bi = new BitmapImage();
  38.                 //设置位图源
  39.                 bi.SetSource(e.ChosenPhoto);
  40.                 //设置元素位图
  41.                 img.Source = bi;
  42.                 txtName.Content = e.OriginalFileName;
  43.                 
  44.             }
  45.         }
  46.         /// <summary>
  47.         /// button事件
  48.         /// </summary>
  49.         /// <param name="sender"></param>
  50.         /// <param name="e"></param>
  51.         private void txtName_Click(object sender, RoutedEventArgs e)
  52.         {
  53.             //打开图片库
  54.             photoChoose.Show();
  55.             //知识点①
  56.             //是否显示拍照按钮
  57.             photoChoose.ShowCamera = true;
  58.             //知识点②
  59.             //设置剪切区域的宽度
  60.             photoChoose.PixelWidth = 50;
  61.             //设置剪切区域的高度
  62.             photoChoose.PixelHeight = 100;
  63.         }
  64.     }
  65. }
  知识点①:PhotoChooserTask类的属性,该属性表示是否显示启动相机按钮,一般显示比较好,增加图片来源途径

  

  知识点②:通俗的讲应该是设置或者获取截取区域的高度和宽度 


  小结: 有裁剪功能是一大特色

   XNA方式获取 

引用命名空间
  1. //引用XNA库
  2. using Microsoft.Xna.Framework.Media;
  3. //BitmapImage类用到
  4. using System.Windows.Media.Imaging;
MediaLibrary应该可以译为媒体库,它包含了影音,图片,是所有媒体的集合
隐藏文件代码:
  1.   

  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Net;
  6. using System.Windows;
  7. using System.Windows.Controls;
  8. using System.Windows.Documents;
  9. using System.Windows.Input;
  10. using System.Windows.Media;
  11. using System.Windows.Media.Animation;
  12. using System.Windows.Shapes;
  13. using Microsoft.Phone.Controls;
  14. //引用XNA库
  15. using Microsoft.Xna.Framework.Media;
  16. //BitmapImage类用到
  17. using System.Windows.Media.Imaging;

  18. namespace XNAChoosePhoto
  19. {
  20.     public partial class MainPage : PhoneApplicationPage
  21.     {
  22.         
  23.         //知识点①
  24.         MediaLibrary mediaL = new MediaLibrary();
  25.         // 构造函数
  26.         public MainPage()
  27.         {
  28.             InitializeComponent();
  29.             //获得图片的方法
  30.             GetPic();
  31.         }
  32.         /// <summary>
  33.         /// 获得一张图片
  34.         /// </summary>
  35.         void GetPic()
  36.         {
  37.             //获得媒体库中所有的图片
  38.             PictureCollection pic = mediaL.Pictures;
  39.             if (pic.Count>1)
  40.             {
  41.                 BitmapImage bi = new BitmapImage();
  42.                 //知识点②
  43.                 Picture pc=pic[0];
  44.                 bi.SetSource(pc.GetImage());
  45.                 img.Source = bi;
  46.                 txtName.Text = "图片名称:" + pc.Name + ";\n该图片相集名称:" + pc.Album.Name + ";\n获取照片摄制时间" + pc.Date;
  47.             }
  48.         }
  49.     }
  50. }
知识点①:MediaLibrary是个很有用的类,比如你可以获得里面的歌曲


  
  1. MediaLibrary mediaL = new MediaLibrary();
  2.             SongCollection sc = mediaL.Songs;
  3.             if (sc.Count > 1)
  4.             {
  5.                 Song s = sc[0];
  6.                 MediaPlayer.Play(s);
  7.             }
  知识点②:Picture类的一些属性或者方法会用得到,比如当前图片所在的相集,相集下是否还会包含相集,以及相集的名称,时间等
小结:整体的思路是从集合中逐级剥离,媒体库(影音,图片)-------》图片集合------》图片-----》图片相关属性;之前忘记从哪个博主那里看到如果用到XNA中的类,在提交应用的时候不能通过