前置條件:手機和電腦未連接或連接電腦Zune軟件關閉(與Zune軟件連接時不允許訪問圖片庫); 版本7.1
獲取手機圖片庫圖片的兩種方式: PhotChooserTask方式和XNA方式進行獲取
PhotChooserTask獲取
引用命名空間
//
引用
// PhotoChooserTask類用到
using Microsoft.Phone.Tasks;
// BitmapImage類用到
using System.Windows.Media.Imaging;
// 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;
}
}
}
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;
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;
}
}
}
}
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);
}
SongCollection sc = mediaL.Songs;
if (sc.Count > 1)
{
Song s = sc[ 0];
MediaPlayer.Play(s);
}
知識點②:Picture類的一些屬性或者方法會用得到,比如當前圖片所在的相集,相集下是否還會包含相集,以及相集的名稱,時間等
小結:整體的思路是從集合中逐級剝離,媒體庫(影音,圖片)-------》圖片集合------》圖片-----》圖片相關屬性;之前忘記從哪個博主那里看到如果用到XNA中的類,在提交應用的時候不能通過
運行后的效果圖: