アプリケーションからカメラ機能を利用する


前回のWP7の記事では、ピクチャーハブを利用した画像の取得方法を紹介しました。
本エントリでは、カメラで撮影した画像を取得する方法を紹介していきます。

WP7のアプリケーションから、OSの機能を利用する方法にChooserがあります。
このChooserには、現在(2012/01/15時点)で以下のものが用意されています。

[table “177” not found /]

本エントリでは、上記表の内の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クラスが持つプロパティは、以下表の通りです。

[table “178” not found /]

表内の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クラスの利用方法は以下記事を参照ください。

画像を表示する

One Comment