方法: Windows Phone 用のアプリケーションでキャプチャされた写真の解像度を調整する

2012/02/09

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

ヒントヒント:

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

ここでは、UI にボタンを追加し、[Res] ボタンがタップされたらキャプチャされた写真の解像度を次のサイズに設定するために必要なロジックを分離コード ファイルに追加します。

注注:

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

キャプチャされた写真の解像度を設定するには

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

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

    <Button Content="Res" Name="ResButton" Click="changeRes_Clicked" FontSize="26" FontWeight="ExtraBold" Height="75"/>
    
    
    

    このコードは、写真の解像度を設定するためのボタンです。

  3. メイン ページの分離コード ファイル MainPage.xaml.cs を開き、MainPage クラスのコンストラクターの前に次の変数宣言を追加します。

    // Holds the current resolution index.
    int currentResIndex = 0;
    
    
  4. MainPage.xaml.cs 内で、Disable UI コメントのすぐ下にある OnNavigatedTo メソッドに以下のコードを追加します。

    ResButton.IsEnabled = false;
    

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

  5. MainPage.xaml.cs で、次のコードを MainPage クラスに追加します。

        private void changeRes_Clicked(object sender, System.Windows.RoutedEventArgs e)
        {
            // Variables
            IEnumerable<Size> resList = cam.AvailableResolutions;
            int resCount = resList.Count<Size>();
            Size res;
    
            // Poll for available camera resolutions.
            for (int i = 0; i < resCount; i++)
            {
                res = resList.ElementAt<Size>(i);
            }
    
            // Set the camera resolution.
            res = resList.ElementAt<Size>((currentResIndex + 1) % resCount);
            cam.Resolution = res;
            currentResIndex = (currentResIndex + 1) % resCount;
    
            // Update the UI.
            txtDebug.Text = String.Format("Setting capture resolution: {0}x{1}", res.Width, res.Height);
            ResButton.Content = "R" + res.Width;
        }
    
    
        Private Sub changeRes_Clicked(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs)
    
            ' Variables
            Dim resList As IEnumerable(Of Size) = cam.AvailableResolutions
            Dim resCount As Integer = resList.Count()
            Dim res As Size
    
            ' Poll for available camera resolutions.
            For i As Integer = 0 To resCount - 1
                res = resList.ElementAt(i)
            Next i
    
            ' Set the camera resolution.
            res = resList.ElementAt((currentResIndex + 1) Mod resCount)
            cam.Resolution = res
            currentResIndex = (currentResIndex + 1) Mod resCount
    
            ' Update the UI.
            txtDebug.Text = String.Format("Setting capture resolution: {0}x{1}", res.Width, res.Height)
            ResButton.Content = "R" & res.Width
    
        End Sub
    
    

    このコードは、写真の解像度を使用できる次の解像度に変更します。使用できるキャプチャ解像度は、PhotoCamera クラスの AvailableResolutions プロパティによって提供されます。これらの解像度は、Size 構造体のコレクションです。各 Size では、Height および Width プロパティが指定されています。

  6. デバイスで、[デバッグ] メニューの [デバッグ開始] をクリックしてアプリケーションを実行します。

表示: