概要
Windows Phone OS 7.0とOS 7.1で使用できます。アプリケーションからピクチャーハブのカメラロールやInternet Explorer等で保存した静止画、新たにカメラで撮影した静止画などを取得するセレクターです。
名前空間:Microsoft.Phone.Tasks
System.Object
+--Microsoft.Phone.Tasks.ChooserBase<PhotoResult>
+--Microsoft.Phone.Tasks.PhotoChooserTask
Tips
PhotoChooserTaskを使ってピクチャーハブから静止画を取得する
アプリケーションからピクチャーハブのカメラロールやInternet Explorer等で保存した静止画、新たにカメラで撮影した静止画などを取得するセレクターです。
PhotoChooserTaskクラスのShowメソッドを実行すると、ピクチャーハブのピクチャの選択ダイアログが表示されます。静止画画像の選択、またはユーザーによってキャンセルされると、Completedイベントハンドラが呼び出しされ、静止画取得に成功したかどうかを判断することが出来ます。
選択後の画像をページ上に表示しますのでXAMLから定義します。button1をクリックするとカメラアプリケーションが実行され、撮影完了後にimage1に表示します。
<phone:PhoneApplicationPage x:Class="PhotoChooserTaskTest.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768" FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource PhoneFontSizeNormal}" Foreground="{StaticResource PhoneForegroundBrush}" SupportedOrientations="Portrait" Orientation="Portrait" shell:SystemTray.IsVisible="True"> <!--LayoutRoot は、すべてのページ コンテンツが配置されるルート グリッドです--> <Grid x:Name="LayoutRoot" Background="Transparent"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <!--TitlePanel は、アプリケーション名とページ タイトルを格納します--> <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28"> <TextBlock x:Name="ApplicationTitle" Text="SOFTBUILD" Style="{StaticResource PhoneTextNormalStyle}"/> <TextBlock x:Name="PageTitle" Text="SavePhoneNumberTask Test" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}" FontSize="64" /> </StackPanel> <!--ContentPanel - 追加コンテンツをここに入力します--> <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <Button Content="Button" Height="72" HorizontalAlignment="Center" Name="button1" VerticalAlignment="Center" Width="450" Click="button1_Click" /> <Image x:Name="image1" Height="269" VerticalAlignment="Top"/> </Grid> </Grid> </phone:PhoneApplicationPage>
using System; using System.Windows; using System.Windows.Media.Imaging; using Microsoft.Phone.Controls; using Microsoft.Phone.Tasks; namespace PhotoChooserTaskTest { public partial class MainPage : PhoneApplicationPage { // コンストラクター public MainPage() { InitializeComponent(); } private void button1_Click(object sender, RoutedEventArgs e) { var task = new PhotoChooserTask(); task.Completed += new EventHandler<PhotoResult>(task_Completed); try { task.Show(); } catch (InvalidOperationException ex) { MessageBox.Show(ex.Message); } } void task_Completed(object sender, PhotoResult e) { if (e.TaskResult == TaskResult.OK && e.ChosenPhoto != null) { // 画像取得に成功 var bmpImage = new BitmapImage(); bmpImage.SetSource(e.ChosenPhoto); image1.Source = bmpImage; } else if (e.TaskResult == TaskResult.Cancel && e.Error == null) { // ユーザーによって取得をキャンセルされた } else { // 画像の取得に失敗した(Zune Softwareが接続されていたなど) } } } }
Windows Phone Emulatorではサンプル画像がいくつか用意されています。デバッグにはこれらの画像を使用すると良いでしょう。アカウントの紐付けが終わっている実機の場合、FacebookやWindows Liveにアップロードしたアルバムから写真を選択することが出来ます。
いずれかの写真を選択すると静止画画像のストリームを得ることが出来ます。このストリームをソースにBitmapImageインスタンスを生成し、Imageへ設定します。
新規にカメラアプリでの撮影を許可する
新規にカメラ撮影を許可したい場合は、ShowCameraプロパティをtrueに設定します。下図の通り、ピクチャの選択ダイアログのアプリケーションバー部分にカメラボタンが表示されます。
カメラボタンをタップすることでカメラを起動し、CameraCaptureTaskと同様に静止画撮影を行います。ユーザーに新たにカメラを使って撮影させたくない場合は、このプロパティはfalseに設定しておくと良いでしょう。
private void button1_Click(object sender, RoutedEventArgs e) { var task = new PhotoChooserTask(); task.Completed += new EventHandler<PhotoResult>(task_Completed); try { // 新規にカメラ撮影を許可する(true = 表示) task.ShowCamera = true; task.Show(); } catch (InvalidOperationException ex) { MessageBox.Show(ex.Message); } }
選択した写真をトリミングする
選択した写真をトリミングしたい場合、PixelWidthプロパティおよびPixelHeightプロパティにサイズを指定します。
private void button1_Click(object sender, RoutedEventArgs e) { var task = new PhotoChooserTask(); task.Completed += new EventHandler<PhotoResult>(task_Completed); try { // 選択した写真をトリミングしたい場合、サイズを指定する task.PixelWidth = 320; task.PixelHeight = 240; task.Show(); } catch (InvalidOperationException ex) { MessageBox.Show(ex.Message); } }