前置條件:手機和電腦未串連或串連電腦Zune軟體關閉(與Zune軟體串連時不允許訪問圖片庫); 版本7.1
擷取手機圖片庫圖片的兩種方式: PhotChooserTask方式和XNA方式進行擷取
PhotChooserTask擷取
引用命名空間
//引用
//PhotoChooserTask類用到
using Microsoft.Phone.Tasks;
//BitmapImage類用到
using System.Windows.Media.Imaging;
隱藏檔案代碼:
using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Windows;using System.Windows.Controls;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Animation;using System.Windows.Shapes;using Microsoft.Phone.Controls;//引用//PhotoChooserTask類用到using Microsoft.Phone.Tasks;//BitmapImage類用到using System.Windows.Media.Imaging;namespace ChoosePhoto{ public partial class MainPage : PhoneApplicationPage { //執行個體化圖片選取器 PhotoChooserTask photoChoose = new PhotoChooserTask(); // 建構函式 public MainPage() { InitializeComponent(); //設定的委託事件 photoChoose.Completed += new EventHandler<PhotoResult>(photoChoose_Completed); } //事件處理完得到圖片 void photoChoose_Completed(object sender, PhotoResult e) { if (e.TaskResult==TaskResult.OK) { //執行個體化位元影像 BitmapImage bi = new BitmapImage(); //設定位元影像源 bi.SetSource(e.ChosenPhoto); //設定元素位元影像 img.Source = bi; txtName.Content = e.OriginalFileName; } } /// <summary> /// button事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void txtName_Click(object sender, RoutedEventArgs e) { //開啟圖片庫 photoChoose.Show(); //知識點① //是否顯示拍照按鈕 photoChoose.ShowCamera = true; //知識點② //設定剪下地區的寬度 photoChoose.PixelWidth = 50; //設定剪下地區的高度 photoChoose.PixelHeight = 100; } }}
知識點①:PhotoChooserTask類的屬性,該屬性工作表示是否顯示啟動相機按鈕,一般顯示比較好,增加圖片來源途徑
知識點②:通俗的講應該是設定或者擷取截取地區的高度和寬度
小結: 有裁剪功能是一大特色
XNA方式擷取
引用命名空間
//引用XNA庫
using Microsoft.Xna.Framework.Media;
//BitmapImage類用到
using System.Windows.Media.Imaging;
MediaLibrary應該可以譯為媒體庫,它包含了影音,圖片,是所有媒體的集合
隱藏檔案代碼:
using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Windows;using System.Windows.Controls;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Animation;using System.Windows.Shapes;using Microsoft.Phone.Controls;//引用XNA庫using Microsoft.Xna.Framework.Media;//BitmapImage類用到using System.Windows.Media.Imaging;namespace XNAChoosePhoto{ public partial class MainPage : PhoneApplicationPage { //知識點① MediaLibrary mediaL = new MediaLibrary(); // 建構函式 public MainPage() { InitializeComponent(); //獲得圖片的方法 GetPic(); } /// <summary> /// 獲得一張圖片 /// </summary> void GetPic() { //獲得媒體庫中所有的圖片 PictureCollection pic = mediaL.Pictures; if (pic.Count>1) { BitmapImage bi = new BitmapImage(); //知識點② Picture pc=pic[0]; bi.SetSource(pc.GetImage()); img.Source = bi; txtName.Text = "圖片名稱:" + pc.Name + ";\n該圖片相集名稱:" + pc.Album.Name + ";\n擷取照片攝製時間" + pc.Date; } } }}
知識點①:MediaLibrary是個很有用的類,比如你可以獲得裡面的歌曲
MediaLibrary mediaL = new MediaLibrary(); SongCollection sc = mediaL.Songs; if (sc.Count > 1) { Song s = sc[0]; MediaPlayer.Play(s); }
知識點②:Picture類的一些屬性或者方法會用得到,比如當前圖片所在的相集,相集下是否還會包含相集,以及相集的名稱,時間等
小結:整體的思路是從集合中逐級剝離,媒體庫(影音,圖片)-------》圖片集合------》圖片-----》圖片相關屬性;之前忘記從哪個博主那裡看到如果用到XNA中的類,在提交應用的時候不能通過
運行後的: