前回のWP7の記事では、ピクチャーハブを利用した画像の取得方法を紹介しました。
本エントリでは、カメラで撮影した画像を取得する方法を紹介していきます。
WP7のアプリケーションから、OSの機能を利用する方法にChooserがあります。
このChooserには、現在(2012/01/15時点)で以下のものが用意されています。
本エントリでは、上記表の内のCameraCaptureTaskを利用し、
アプリケーションからカメラを起動し、撮影した画像を取得/表示する方法を解説します。
下記は本エントリで作成するサンプルのスクリーンショットになります。
ボタン押下後、カメラが起動します。カメラ撮影後、元のアプリケーションに戻り撮影画像が表示されるサンプルです。
それでは続きをどうぞ。
Chooserの利用方法
Chooserとは、WP7アプリケーションからOSが持つ機能、具体的には「保存されている写真を選択する」「カメラを起動し撮影する」
「メールアドレスを選択し取得する」などを利用する機能です。
Chooser APIを利用する方法は、上記表で紹介した6つの機能でほぼ共通しています。
まず、Chooserの利用方法の概要を押さえておきましょう。
ポイントは以下の3点です。
1.using の定義
Chooser APIを利用するためには、標準で定義されている名前空間に以下を追加する必要があります。
using Microsoft.Phone.Tasks;
表示メソッドの呼び出し
Chooser APIを利用し、OSの機能を呼び出します。
Chooser APIに分類される、各hogeTaskクラス(上記表のクラス)のshowメソッドをコールすることで、
機能を呼び出すことができます。
CameraCaptureTaskの場合は以下のようになります。
CameraCaptureTask task = new CameraCaptureTask(); task.show();
イベントハンドラの登録
呼び出した機能のユーザー操作を終えると、Chooser APIの各hogeTaskクラスのCompletedプロパティに設定されたメソッドが呼び出されます。
Completedプロパティにメソッドを登録するためには、EventHandlerクラスを利用します。
CameraCaptureTaskの場合の利用方法は以下の通りになります。
■MainPage.xaml.cs
public MainPage() { InitializeComponent(); // CameraCaptureTaskのNew mCameraCaptureTask = new CameraCaptureTask(); // Complete時の処理を設定 mCameraCaptureTask.Completed += new EventHandler<PhotoResult>(mCameraCaptureTask_Completed); } /** * CaptureTaskのCompleted-Eventに登録するMethod * */ void mCameraCaptureTask_Completed(object sender, PhotoResult e) { // ...省略
それぞれのChooserによって、Completedに登録するメソッド内で実施すべき処理に変更はありますが、
概ねこの3点を踏まえることで、Chooser APIを利用することができます。
以降は、CameraCaptureTaskを利用した場合の取得データの表示方法を解説していきます。
カメラ撮影データの取得
Completedプロパティに登録するメソッドで、カメラ撮影を行ったデータを取得します。
Completedプロパティに登録するメソッドは、PhotoResult型の引数をもつ必要があります。
void mCameraCaptureTask_Completed(object sender, PhotoResult e)
このPhotoResultクラスの持つプロパティを利用し、CopmletedプロパティではChooserで呼び出した機能の終了状態の判断と
カメラ撮影データを取得/表示する処理を行います。
PhotoResultクラスが持つプロパティは、以下表の通りです。
表内のTaskResultプロパティとChosenPhotoプロパティを利用した例が以下のサンプルになります。
■MainPage.xaml.cs
/** * CaptureTaskのCompleted-Eventに登録するMethod * */ void mCameraCaptureTask_Completed(object sender, PhotoResult e) { // Resultのチェック if (e.TaskResult == TaskResult.OK && e.ChosenPhoto != null) { // カメラで撮影した画像が取得できた // imageに表示するBitmapを作成する BitmapImage bmp = new BitmapImage(); bmp.SetSource(e.ChosenPhoto); image1.Source = bmp; } else if (e.TaskResult == TaskResult.Cancel) { // userによるキャンセル時 } else if(e.TaskResult == TaskResult.None || e.ChosenPhoto == null) { // 取得失敗 } }
8行目で、Chooserで呼び出した機能の終了状態を判断し、14行目で撮影した画像データをBitmap形式に変換しています。
その他、Imageクラスの利用方法は以下記事を参照ください。