エクスポート (0) 印刷
すべて展開

方法: Windows Phone 用のアプリケーションでカメラのフラッシュを使用する

2012/02/09

Windows Phone OS 7.1 を使用して、プログラムによってデバイス カメラにアクセスできます。このトピックでは、カメラのフラッシュ モードをプログラムで設定する方法について説明します。これは、「方法: Windows Phone 用の基本的なカメラ アプリケーションを作成する」の続きであり、このトピックで既に基本的なカメラ プロジェクトを作成していることを前提としています。

ヒントヒント:

このトピックは、基本的なカメラのサンプルに対応しています。完全なプロジェクトをダウンロードするには、「Windows Phone のコード サンプル」を参照してください。

Windows Phone では、FlashMode 列挙型の次のフラッシュ モードがサポートされています。

フラッシュ モード

説明

Off

カメラのフラッシュは無効です。

On

カメラのフラッシュは有効です。

RedEyeReduction

赤目補正を有効にします。

Auto

カメラのフラッシュは自動モードで使用されます。

重要な注重要な注:

すべてのフラッシュ モードがすべてのデバイスでサポートされているわけではありません。IsFlashModeSupported(FlashMode) メソッドを呼び出してモードが使用できることを確認してから、モードを使用することが重要です。

ここでは、フラッシュ モードの構成をアプリケーションに実装するために必要なコードを示します。

注注:

このトピックは、C# 開発を基にしていますが、Visual Basic のコードも提供しています。

カメラのフラッシュを実装するには

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

  2. メイン ページの XAML ファイルである MainPage.xaml ファイルで、ShutterButton というの名前の Button 要素の下にある StackPanel 要素に次のコードを追加します。このコードは、カメラのフラッシュ用のボタンです。

    <Button Name="FlashButton" Content="Fl:TBD" Click="changeFlash_Clicked" FontSize="26" FontWeight="ExtraBold" Height="75"/>
    
    
  3. メイン ページの分離コード ファイル MainPage.xaml.cs を開き、MainPage クラスのコンストラクターの前に次の変数宣言を追加します。

        // Holds current flash mode.
        private string currentFlashMode;
    
    
  4. MainPage.xaml.cs 内で、Disable UI コメントのすぐ下にある OnNavigatedTo メソッドに以下のコードを追加します。

    FlashButton.IsEnabled = false;
    

    このコードはフラッシュ ボタンを無効にします。これは、デバイス上でカメラが利用不可能である場合に使用されます。

  5. MainPage.xaml.cs で、cam_Initialized メソッドの txtDebug ステートメントのすぐ下に、次のコードを追加します。

        // Set flash button text.
        FlashButton.Content = "Fl:" + cam.FlashMode.ToString();
    
    

    このコードでは、現在のフラッシュ モードが FlashButton ボタンに表示されます。

  6. MainPage.xaml.cs で、次のコードを MainPage クラスに追加します。このコードは、ボタンが押されるたびに異なるフラッシュ モードに切り替えることで、changeFlash_Clicked のイベント ハンドラーを実装します。

        // Activate a flash mode.
        // Cycle through flash mode options when the flash button is pressed.
        private void changeFlash_Clicked(object sender, RoutedEventArgs e)
        {
    
            switch (cam.FlashMode)
            {
                case FlashMode.Off:
                    if (cam.IsFlashModeSupported(FlashMode.On))
                    {
                        // Specify that flash should be used.
                        cam.FlashMode = FlashMode.On;
                        FlashButton.Content = "Fl:On";
                        currentFlashMode = "Flash mode: On";
                    }
                    break;
                case FlashMode.On:
                    if (cam.IsFlashModeSupported(FlashMode.RedEyeReduction))
                    {
                        // Specify that the red-eye reduction flash should be used.
                        cam.FlashMode = FlashMode.RedEyeReduction;
                        FlashButton.Content = "Fl:RER";
                        currentFlashMode = "Flash mode: RedEyeReduction";
                    }
                    else if (cam.IsFlashModeSupported(FlashMode.Auto))
                    {
                        // If red-eye reduction is not supported, specify automatic mode.
                        cam.FlashMode = FlashMode.Auto;
                        FlashButton.Content = "Fl:Auto";
                        currentFlashMode = "Flash mode: Auto";
                    }
                    else 
                    {
                        // If automatic is not supported, specify that no flash should be used.
                        cam.FlashMode = FlashMode.Off;
                        FlashButton.Content = "Fl:Off";
                        currentFlashMode = "Flash mode: Off";
                    }
                    break;
                case FlashMode.RedEyeReduction:
                    if (cam.IsFlashModeSupported(FlashMode.Auto))
                    {
                        // Specify that the flash should be used in the automatic mode.
                        cam.FlashMode = FlashMode.Auto;
                        FlashButton.Content = "Fl:Auto";
                        currentFlashMode = "Flash mode: Auto";
                    }
                    else
                    {
                        // If automatic is not supported, specify that no flash should be used.
                        cam.FlashMode = FlashMode.Off;
                        FlashButton.Content = "Fl:Off";
                        currentFlashMode = "Flash mode: Off";
                    }
                    break;
                case FlashMode.Auto:
                    if (cam.IsFlashModeSupported(FlashMode.Off))
                    {
                        // Specify that no flash should be used.
                        cam.FlashMode = FlashMode.Off;
                        FlashButton.Content = "Fl:Off";
                        currentFlashMode = "Flash mode: Off";
                    }
                    break;
            }
    
            // Display current flash mode.
            this.Dispatcher.BeginInvoke(delegate()
            {
                txtDebug.Text = currentFlashMode;
            });
        }
    
    
  7. デバイスで、[デバッグ] メニューの [デバッグ開始] をクリックしてアプリケーションを実行します。

表示:
© 2014 Microsoft