画像を撮影する
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コントロールで表示できます。

