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での確認
取得できませんでした。