画像を撮影する
Webカメラ画像の撮影には、CameraCaptureUIを用いた撮影と、CaptureElementを用いた撮影方法があります。
- CameraCaptureUIは、撮影処理をOSに委譲します。OSに委譲されると、全画面での撮影画面に遷移します。
- CaptureElementは、コントロールとして配置して、ストアアプリ内にWebカメラの画像を表示します。
CameraCaptureUIを用いた撮影
CameraCaptureUIを利用した撮影は、CameraCaptureUIを呼び出して、結果の画像を受け取ります。そのため利用は簡単に行えます。
// CameraCaptureUIを用意 CameraCaptureUI captureUI = new CameraCaptureUI(); // 画像取得開始、ここから先はOSに処理を任せてプログラム上は画像が入ったStorageFileクラスを取得する var file = await captureUI.CaptureFileAsync(CameraCaptureUIMode.Photo); if (file != null) { var stream = await file.OpenReadAsync(); BitmapImage bitmap = new BitmapImage(); bitmap.SetSource(stream); // Imageコントロールに画像を表示する this.previewImage.Source = bitmap; }
CaptureElementを用いた撮影
CaptureElementはストアアプリの画面内でプレビュー表示および撮影ができますが、CameraCaptureUIに比べて手順は多くなります。
まずは画面にCameraCaptureUIを配置します。
<CaptureElement x:Name="captureElement" HorizontalAlignment="Left" Width="373" Margin="43,133,0,0" VerticalAlignment="Top" Height="321"/>
プレビューするための初期化処理を記述します。
var mediaCapture = new MediaCapture(); mediaCapture.Failed += mediaCapture_Failed; try { await mediaCapture.InitializeAsync(); this.captureElement.Source = mediaCapture; // プレビューを開始 await mediaCapture.StartPreviewAsync(); } catch { // カメラがない、カメラを許可しない場合に例外が発生する }
カメラでの撮影を開始します。
MediaCapture capture = captureElement.Source; // JpegExで画像を取得 var property = ImageEncodingProperties.CreateJpegXR(); var rndStream = new InMemoryRandomAccessStream(); try { await capture.CapturePhotoToStreamAsync(property, rndStream); // ストリームの位置を最初に戻す rndStream.Seek(0); BitmapImage bitmap = new BitmapImage(); bitmap.SetSource(rndStream); // 画像をImageコントロールに表示する this.previewImage.Source = bitmap; } catch { //キャプチャーが失敗した場合例外が発生する }
CapturePhotoToStreamAsyncメソッドでキャプチャーした画像を、ストリームに保存します。保存したデータをBitmapImageクラスにセットすることで、Imageコントロールで表示できます。