酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

WindowsストアアプリでMediaCaptureクラスを使ってカメラプレビューと静止画撮影を指定した解像度でおこなう

MediaCaptureを使ったカメラプレビューと静止画撮影の簡単な方法は、こちらの記事をご覧ください。

本記事では、MediaCaptureを使ったカメラプレビューと静止画撮影を指定した解像度でおこなう方法をご紹介します。

カメラプレビューが可能な解像度を取得する

カメラプレビューが可能な解像度を取得するには、MediaCaptureのVideoDeviceControllerプロパティから、さらにGetAvailableMediaStreamPropertiesメソッドを使います。

// using Windows.Media.Capture;
// using Windows.Media.MediaProperties;

private List<VideoEncodingProperties> GetPreviewResolusions(MediaCapture capture)
{
    IReadOnlyList<IMediaEncodingProperties> ret;
    ret = capture.VideoDeviceController
        .GetAvailableMediaStreamProperties(MediaStreamType.VideoPreview);

    if (ret.Count <= 0)
    {
        // リソースが取得できなかった場合は空のリストを返す
        return new List<VideoEncodingProperties>();
    }

    foreach (VideoEncodingProperties vp in ret)
    {
        var frameRate = (vp.FrameRate.Numerator / vp.FrameRate.Denominator);

        Debug.WriteLine("{0}: {1}x{2} {3}fps", vp.Subtype,
                        vp.Width, vp.Height, frameRate);
    }

    return ret.Select(item => (VideoEncodingProperties)item).ToList();
}

MacBook Pro with Retina displayでの確認

私がメインPCとして使っているMacBook Pro with Retina displayで確認したところ、以下のような情報が取得できました。

YUY2: 640x480 29fps
YUY2: 640x480 25fps
YUY2: 640x480 24fps
YUY2: 640x480 15fps
YUY2: 160x120 29fps
YUY2: 160x120 25fps
YUY2: 160x120 24fps
YUY2: 160x120 15fps
YUY2: 176x144 29fps
YUY2: 176x144 25fps
YUY2: 176x144 24fps
YUY2: 176x144 15fps
YUY2: 320x240 29fps
YUY2: 320x240 25fps
YUY2: 320x240 24fps
YUY2: 320x240 15fps
YUY2: 352x288 29fps
YUY2: 352x288 25fps
YUY2: 352x288 24fps
YUY2: 352x288 15fps
YUY2: 480x360 29fps
YUY2: 480x360 25fps
YUY2: 480x360 24fps
YUY2: 480x360 15fps
YUY2: 1280x720 10fps
MJPG: 1024x576 29fps
MJPG: 1024x576 25fps
MJPG: 1024x576 24fps
MJPG: 1024x576 15fps
MJPG: 960x544 29fps
MJPG: 960x544 25fps
MJPG: 960x544 24fps
MJPG: 960x544 15fps
MJPG: 1280x720 29fps
MJPG: 1280x720 25fps
MJPG: 1280x720 24fps
MJPG: 1280x720 15fps

Iconia W5(バックカメラ)での確認

YUY2: 448x252
YUY2: 640x360
YUY2: 640x480

Iconia W3(フォアカメラ、バックカメラ共通)での確認

YUY2: 640x480
YUY2: 640x360
YUY2: 448x252

HD Pro Webcam C910での確認

MJPG: 640x480 30fps
MJPG: 160x120 30fps
MJPG: 176x144 30fps
MJPG: 320x176 30fps
MJPG: 320x240 30fps
MJPG: 432x240 30fps
MJPG: 352x288 30fps
MJPG: 544x288 30fps
MJPG: 640x360 30fps
MJPG: 752x416 30fps
MJPG: 800x448 30fps
MJPG: 864x480 30fps
MJPG: 960x544 30fps
MJPG: 1024x576 30fps
MJPG: 800x600 30fps
MJPG: 1184x656 30fps
MJPG: 960x720 30fps
MJPG: 1280x720 30fps
MJPG: 1392x768 15fps
MJPG: 1504x832 15fps
MJPG: 1600x896 15fps
MJPG: 1280x960 15fps
MJPG: 1712x960 15fps
MJPG: 1792x1008 15fps
MJPG: 1920x1080 30fps
MJPG: 1600x1200 15fps
MJPG: 2048x1536 15fps
MJPG: 2592x1944 10fps
RGB24: 640x480 30fps
RGB24: 160x120 30fps
RGB24: 176x144 30fps
RGB24: 320x176 30fps
RGB24: 320x240 30fps
RGB24: 432x240 30fps
RGB24: 352x288 30fps
RGB24: 544x288 30fps
RGB24: 640x360 30fps
RGB24: 752x416 30fps
RGB24: 800x448 30fps
RGB24: 864x480 30fps
RGB24: 960x544 30fps
RGB24: 1024x576 30fps
RGB24: 800x600 30fps
RGB24: 1184x656 30fps
RGB24: 960x720 30fps
RGB24: 1280x720 30fps
RGB24: 1392x768 15fps
RGB24: 1504x832 15fps
RGB24: 1600x896 15fps
RGB24: 1280x960 15fps
RGB24: 1712x960 15fps
RGB24: 1792x1008 15fps
RGB24: 1920x1080 5fps
RGB24: 1600x1200 5fps
RGB24: 2048x1536 5fps
RGB24: 2592x1944 5fps
Unknown: 640x480 30fps
Unknown: 160x120 30fps
Unknown: 176x144 30fps
Unknown: 320x176 30fps
Unknown: 320x240 30fps
Unknown: 432x240 30fps
Unknown: 352x288 30fps
Unknown: 544x288 30fps
Unknown: 640x360 30fps
Unknown: 752x416 30fps
Unknown: 800x448 30fps
Unknown: 864x480 30fps
Unknown: 960x544 30fps
Unknown: 1024x576 30fps
Unknown: 800x600 30fps
Unknown: 1184x656 30fps
Unknown: 960x720 30fps
Unknown: 1280x720 30fps
Unknown: 1392x768 15fps
Unknown: 1504x832 15fps
Unknown: 1600x896 15fps
Unknown: 1280x960 15fps
Unknown: 1712x960 15fps
Unknown: 1792x1008 15fps
Unknown: 1920x1080 5fps
Unknown: 1600x1200 5fps
Unknown: 2048x1536 5fps
Unknown: 2592x1944 5fps

任意の解像度を使ってカメラプレビューをおこなう

カメラプレビューを開始するには、MediaCaptureオブジェクトを生成して、InitializeAsyncメソッドで初期化して、StartPreviewAsyncメソッドでカメラプレビューを開始します。詳しくはこちらの記事をご覧ください。

MacBook Pro with Retina displayでは、デフォルトの設定でMediaCaptureを使ってカメラプレビューを開始すると、640x480でプレビューされてしまいます(標準のカメラアプリでは何故か1280x720で表示される)。

以下のサンプルコードでは、搭載されているカメラデバイスのプレビュー可能な解像度のうち一番大きな解像度を使って、カメラプレビューをおこなうようにしました。

private async void StartCameraPreviewAsync()
{
    // MediaCaptureオブジェクトの生成とキャプチャー処理の初期化
    capture = new MediaCapture();
    await capture.InitializeAsync();


    // 一番大きなプレビューサイズのものを取得する
    var resolutions = GetPreviewResolusions(capture);
    VideoEncodingProperties maxResolution = resolutions[0];
    foreach (var vp in resolutions)
    {
        var frameRate = (vp.FrameRate.Numerator / vp.FrameRate.Denominator);

        Debug.WriteLine("{0}) {1}: {2}x{3} {4}fps", i, vp.Subtype, 
                        vp.Width, vp.Height, frameRate);

        if (vp.Width > maxResolution.Width && vp.Subtype.Equals("YUY2"))
        {
            maxResolution = vp;
        }
    }

    // 取得したプレビューサイズをMediaCaptureオブジェクトに設定する
    await capture.VideoDeviceController
        .SetMediaStreamPropertiesAsync(
            MediaStreamType.VideoPreview, 
            maxResolution);


    // プレビューを開始する
    captureElement.Source = capture;
    await capture.StartPreviewAsync();
}

静止画撮影が可能な解像度を取得する

カメラプレビューの解像度を取得したときとほぼ同じコードで、静止画撮影が可能な解像度を取得することができます。GetAvailableMediaStreamPropertiesメソッドで指定するパラメータをMediaStreamType.Photoにします。

private List<ImageEncodingProperties> GetCaptureResolusions(MediaCapture capture)
{
    var ret = capture.VideoDeviceController
        .GetAvailableMediaStreamProperties(MediaStreamType.Photo)
        .Where(item => item is ImageEncodingProperties)
        .Select(item => (ImageEncodingProperties)item)
        .ToList();

    foreach (var vp in ret)
    {
        Debug.WriteLine("{0}: {1}x{2}", vp.Subtype,
           vp.Width, vp.Height);
    }

    return ret;
}

MacBook Pro with Retina displayでの確認

私がメインPCとして使っているMacBook Pro with Retina displayで確認したところ、以下のような情報が取得できました。

JPEG: 640x480
JPEG: 1280x720
JPEG: 1280x960
JPEG: 1920x1080

Iconia W5(フォアカメラ)での確認

Iconia W3のフォアカメラで確認したところ、以下のような情報が取得できました。

JPEG: 640x480
JPEG: 1280x720
JPEG: 1280x960
JPEG: 1920x1080

Iconia W5(バックカメラ)での確認

Iconia W3のバックカメラで確認したところ、以下のような情報が取得できました。

JPEG: 640x480
JPEG: 1280x720
JPEG: 1280x960
JPEG: 1920x1080
JPEG: 1600x1200
JPEG: 2560x1920
JPEG: 3264x2448

Iconia W3(フォアカメラ、バックカメラ共通)での確認

JPEG: 1920x1080

HD Pro Webcam C910での確認

取得できませんでした。

参考