SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

速習 Windowsストアアプリケーション

Windowsストアアプリのメディアファイル操作の基礎

速習 Windowsストアアプリケーション 第7回

  • X ポスト
  • このエントリーをはてなブックマークに追加

画像を撮影する

 Webカメラ画像の撮影には、CameraCaptureUIを用いた撮影と、CaptureElementを用いた撮影方法があります。

  • CameraCaptureUIは、撮影処理をOSに委譲します。OSに委譲されると、全画面での撮影画面に遷移します。
  • CaptureElementは、コントロールとして配置して、ストアアプリ内にWebカメラの画像を表示します。
CameraCaptureUIを用いた撮影

 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;
}
CameraCaptureUIを用いて画像を撮影する
CameraCaptureUIを用いて画像を撮影する
CaptureElementを用いた撮影

 CaptureElementはストアアプリの画面内でプレビュー表示および撮影ができますが、CameraCaptureUIに比べて手順は多くなります。

 まずは画面にCameraCaptureUIを配置します。

CameraCaptureUIで撮影するサンプル
<CaptureElement x:Name="captureElement" HorizontalAlignment="Left" Width="373" Margin="43,133,0,0" VerticalAlignment="Top" Height="321"/>

 プレビューするための初期化処理を記述します。

CameraCaptureUIで撮影するサンプル
var mediaCapture = new MediaCapture();
mediaCapture.Failed += mediaCapture_Failed;

try
{
    await mediaCapture.InitializeAsync();
    this.captureElement.Source = mediaCapture;
    // プレビューを開始
    await mediaCapture.StartPreviewAsync();
}
catch
{
    // カメラがない、カメラを許可しない場合に例外が発生する
}

 カメラでの撮影を開始します。

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

次のページ
音声ファイル

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
速習 Windowsストアアプリケーション連載記事一覧

もっと読む

この記事の著者

西村 誠(ニシムラ マコト)

 Microsoft MVP Windows Platform Development。 Flash、PHPの開発経験もあり国産ECサイト構築フレームワーク「EC-CUBE」の公式エバンジェリストでもある。 ブログ:眠るシーラカンスと水底のプログラマー 著書:基礎から学ぶ Windowsストアアプリ開発

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/7059 2013/03/26 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング