オートフォーカスの制御を行う

カメラはピントが合っていないと焦点がはっきりせずにボケた映像になります。ピントを合わせて綺麗にプレビューさせたり静止画撮影を行う為にはフォーカスを調整する必要があります。

ここでは例として、カメラプレビュー時にフォーカスを合わせる方法をご紹介します。カメラプレビューを開始するまではPhotoCameraを使ってカメラプレビューを行うで紹介していますのでご覧ください。

PhotoCameraクラスには、Focusメソッドという自動でピントを合わせるメソッドがあります。オートフォーカスを開始させる方法を紹介します。

オートフォーカスを開始する

オートフォーカスを開始するには、PhotoCamera.Focusメソッドを使用します。

            // オートフォーカス処理を開始する
            camera.Focus();

カメラプレビューを表示されている矩形のPreviewRectangleがタップされるのをトリガーにして、PhotoCamera.Focusメソッドを呼び出します。MainPage.xamlで配置しているPreviewRectangleにTapイベントのハンドラを追加してください。

        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <!-- この矩形にカメラプレビューを表示する -->
            <Rectangle x:Name="PreviewRectangle" Tap="PreviewRectangle_Tap">
                <Rectangle.Fill>
                    <VideoBrush x:Name="PreviewBrush" />
                </Rectangle.Fill>
            </Rectangle>
        </Grid>

AutoFocusCompletedイベントのハンドラを設定して、PhotoCamera.Focusメソッドを使います。フォーカス調整が完了するとcamera_AutoFocusCompletedメソッドが呼ばれます。実機(HTC Mozart)上で、オートフォーカスの開始から終了まで約2秒ほど掛かりました。

        // 表示領域がタップされるとオートフォーカス処理を開始する
        private void PreviewRectangle_Tap(object sender, System.Windows.Input.GestureEventArgs e) {
            if (camera == null) {
                return;
            }
 
            System.Diagnostics.Debug.WriteLine("AutoFocus Start: " + DateTime.Now.ToString("HH:mm:ss.fff"));
            camera.AutoFocusCompleted += camera_AutoFocusCompleted;
            // オートフォーカス処理を開始する
            camera.Focus();
        }
 
        // オートフォーカスの完了
        void camera_AutoFocusCompleted(object sender, CameraOperationCompletedEventArgs e) {
            camera.AutoFocusCompleted -= camera_AutoFocusCompleted;
            System.Diagnostics.Debug.WriteLine("AutoFocus End  : " + DateTime.Now.ToString("HH:mm:ss.fff"));
        }

プレビュー中の画面をタップし、オートフォーカス処理を行い、ピントを合わせました。

オートフォーカスを中止する

実機上でオートフォーカスの調整に時間が掛かってしまいますので、処理中にオートフォーカスを中止するには、PhotoCamera.CancelFocusメソッドを使用します。

            // オートフォーカス処理を中止する
            camera.CancelFocus();

特定のポイントでオートフォーカスを行う

ファインダー内の特定のポイントでカメラのオートフォーカスの動作を開始します。

http://msdn.microsoft.com/en-us/library/microsoft.devices.photocamera.focusatpoint%28v=VS.92%29.aspx

参照