このトピックはまだ評価されていません - このトピックを評価する

Windows Phone のハードウェア カメラ シャッター ボタンにアクセスする方法

2013/12/05

対象: Windows Phone 8 | Windows Phone OS 7.1

Windows Phone OS 7.1 以降では、アプリは電話のハードウェア シャッター ボタンにプログラムでアクセスすることができます。このトピックでは、アプリでこの機能を実装する方法を示します。ハードウェア シャッター ボタンは、Microsoft.Devices.PhotoCamera クラスまたは Windows.Phone.Media.Capture.PhotoCaptureDevice クラスを使用してカメラ センサーにアクセスするカメラ アプリで使用できます。このトピックは、「Windows Phone の基本カメラ アプリを作成する方法」の続きであり、このトピックで既に基本的なカメラ プロジェクトを作成していることを前提としています。

ヒントヒント:

Windows Phone 8 以降、アプリでは高度なキャプチャ シナリオ用に Windows.Phone.Media.Capture.PhotoCaptureDevice クラスを使用するようになりました。Windows.Phone.Media.Capture.PhotoCaptureDevice では、(電話にある場合) ISO、露出補正、手動フォーカス位置などの写真プロパティをアプリで制御できます。このトピックでは、Windows.Phone.Media.Capture.PhotoCaptureDevice については説明していません。このクラスの詳細については、「Windows Phone 8 の高度な写真キャプチャ」を参照してください。

このトピックは、基本的なカメラのサンプルに対応しています。

ハードウェア シャッター ボタンへのアクセスは、次の表に示されているように、CameraButtons クラスの一連のイベントを通じて管理されます。

イベント

説明

ShutterKeyHalfPressed

シャッター ボタンが約 800 ミリ秒間押されたままになると発生します。半押しの時間がこれよりも短い場合、このイベントはトリガーされません。

ShutterKeyPressed

シャッター ボタンが全押しを受け取ったときに発生します。

ShutterKeyReleased

シャッター ボタンから指を離したときに発生します。

これらのイベントは、写真またはビデオのキャプチャに使用できます。ビデオをキャプチャする場合は、ハードウェア シャッター ボタンを押す前に、Start メソッドが呼び出されている必要があります。キャプチャ ソースが開始されていない場合、これらのイベントは発生しません。Windows Phone アプリでビデオをキャプチャする詳細については、「Windows Phone 用のカメラ アプリでビデオを記録する方法」を参照してください。

メモメモ:

以前の演習では、プログラムによる PhotoCamera API へのアクセスの方法を示すために、ソフトウェア シャッターおよびオートフォーカス ボタンを使用しました。エンド ユーザーのエクスペリエンスを最適化するには、オートフォーカスとシャッターの操作のために、アプリでカメラのハードウェア シャッター ボタンを使用することをお勧めします。

ここでは、これらのイベントを実装して、以下のアプリの動作を実現します。

  • シャッター ボタンの全押しによって、画像をキャプチャし、メディア ライブラリに保存します。

  • シャッター ボタンの半押しによって、カメラのオートフォーカスを開始します。

  • シャッター ボタンから指を離すと、オートフォーカスが取り消されます。

ハードウェア シャッター ボタンを実装するには

  1. Windows Phone の基本カメラ アプリを作成する方法」で作成した基本的なカメラのプロジェクトを開きます。

  2. メイン ページの分離コード ファイル MainPage.xaml.cs を開き、OnNavigatedTo(NavigationEventArgs) メソッドに次のコードを追加します。

        // The event is fired when the shutter button receives a half press.
        CameraButtons.ShutterKeyHalfPressed += OnButtonHalfPress;
    
        // The event is fired when the shutter button receives a full press.
        CameraButtons.ShutterKeyPressed += OnButtonFullPress;
    
        // The event is fired when the shutter button is released.
        CameraButtons.ShutterKeyReleased += OnButtonRelease;
    
    
  3. MainPage.xaml.cs で、Dispose メソッドを呼び出した後、以下のコードを OnNavigatingFrom(NavigatingCancelEventArgs) メソッドに追加します。このコードにより、カメラに関係するメモリを解放できます。

        CameraButtons.ShutterKeyHalfPressed -= OnButtonHalfPress;
        CameraButtons.ShutterKeyPressed -= OnButtonFullPress;
        CameraButtons.ShutterKeyReleased -= OnButtonRelease;
    
    
  4. MainPage.xaml.cs で、次のコードを MainPage クラスに追加します。

            // Provide auto-focus with a half button press using the hardware shutter button.
            private void OnButtonHalfPress(object sender, EventArgs e)
            {
                if (cam != null)
                {
                    // Focus when a capture is not in progress.
                    try
                    {
                        this.Dispatcher.BeginInvoke(delegate()
                        {
                            txtDebug.Text = "Half Button Press: Auto Focus";
                        });
    
                        cam.Focus();
                    }
                    catch (Exception focusError)
                    {
                        // Cannot focus when a capture is in progress.
                        this.Dispatcher.BeginInvoke(delegate()
                        {
                            txtDebug.Text = focusError.Message;
                        });
                    }
                }
            }
    
            // Capture the image with a full button press using the hardware shutter button.
            private void OnButtonFullPress(object sender, EventArgs e)
            {
                if (cam != null)
                {
                    cam.CaptureImage();
                }
            }
    
            // Cancel the focus if the half button press is released using the hardware shutter button.
            private void OnButtonRelease(object sender, EventArgs e)
            {
    
                if (cam != null)
                {
                    cam.CancelFocus();
                }
            }
    
    

    このコードは、これらのイベント ハンドラーを使用して、PhotoCamera クラスの Focus()CaptureImage()、および CancelFocus() メソッドを呼び出します。

    メモメモ:

    オートフォーカスをハードウェア シャッター ボタンで有効にする場合、組み込みのカメラ エクスペリエンスに合わせて、オートフォーカスに若干の遅延が生じます。

  5. 電話で、[デバッグ] メニューの [デバッグ開始] をクリックしてアプリを実行します。

この情報は役に立ちましたか。
(残り 1500 文字)
フィードバックをいただき、ありがとうございました
表示:
© 2014 Microsoft. All rights reserved.