Windows Phoneで動くカメラアプリ作成の基礎知識Silverlightベースで作るWP7アプリ開発入門(7)(3/3 ページ)

» 2011年12月02日 00時00分 公開
[泉本優輝WP Arch]
前のページへ 1|2|3       

Picture Hubに保存

 2つ目のPicture Hubへの保存を実装してみましょう。Picture Hubボタンを選択してプロパティパネルからTapイベントを作成します。ダブルクリックすると自動的にイベントハンドラが作成されます。

イベントハンドラの設定 イベントハンドラの設定

 Visual Studioに移動して実装しましょう。今回は「MemoryStream」を利用するので、参照設定に「Microsoft.Xna.Framework」をusingで追加します。

using Microsoft.Xna.Framework.Media;

 コードはピクセルをWriteableBitmapにコピーするところまでは同じです。

private void PictureButton_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
    // プレビューフレームを取得するバッファーを確保する
    double pixelSize = _camera.PreviewResolution.Width * _camera.PreviewResolution.Height;
    var pixelData = new int[(int)pixelSize];
    // プレビューフレームを取得
    _camera.GetPreviewBufferArgb32(pixelData);
    //Imageに表示
    // バッファーをWriteableBitmapへコピー
    var bmp = new WriteableBitmap((int)_camera.PreviewResolution.Width, (int)_camera.PreviewResolution.Height);
    pixelData.CopyTo(bmp.Pixels, 0);
    var stream = new MemoryStream();
    bmp.SaveJpeg(stream, bmp.PixelWidth, bmp.PixelHeight, 0, 80);
    using (var medialib = new MediaLibrary())
        medialib.SavePicture("preview.jpg", stream.ToArray());
}

 Picture Hubに保存する画像形式はjpg形式です。そのため、「bmp.SaveJpeg」メソッドを使って、WriteableBitmapをjpg形式に変換します。その後、SavePictureを使い、「preview.jpg」という名前でPicture Hubに画像を保存しています。

 実行して確認しましょう。「PictureHub」ボタンをクリックすると、Picture Hubに画像を保存します。複数実行すると、「preview.jpg」「preview(1).jpg」「preview(2).jpg」と保存されました。

Picture Hubに保存されたカメラプレビューのキャプチャ Picture Hubに保存されたカメラプレビューのキャプチャ

Isolated Storageに保存

 最後に、分離ストレージに画像を保存してみましょう。「Isolated Storage」ボタンを選択してプロパティパネルから「Tap」イベントを作成します。ダブルクリックすると、自動的にイベントハンドラを作成します。

イベントハンドラの設定 イベントハンドラの設定

 Visual Studioに移動して実装しましょう。今回もWriteavleBitmapへコピーする部分まで同じです。

private void IsolatedButton_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
    // プレビューフレームを取得するバッファーを確保する
    double pixelSize = _camera.PreviewResolution.Width * _camera.PreviewResolution.Height;
    var pixelData = new int[(int)pixelSize];
    // プレビューフレームを取得
    _camera.GetPreviewBufferArgb32(pixelData);
    //Imageに表示
    // バッファーをWriteableBitmapへコピー
    var bmp = new WriteableBitmap((int)_camera.PreviewResolution.Width, (int)_camera.PreviewResolution.Height);
    pixelData.CopyTo(bmp.Pixels, 0);
    using (var store = IsolatedStorageFile.GetUserStoreForApplication())
    using (var strm = store.CreateFile("preview.jpg"))
    {
        bmp.SaveJpeg(strm, bmp.PixelWidth, bmp.PixelHeight, 0, 100);
    }
}

 分離ストレージにファイルを保存するには「IsolatedStorageFile」を利用します。その後ファイル名を指定し、同じくbmp.SaveJpegで保存しています。

ツールで分離ストレージの中身を確認

 アプリの分離ストレージを確認する方法はいくつかあります。代表的なものとして、Windows Phone SDK 7.1標準搭載の「Isolated Storage Explorer Tool」や、オープンソースの「Windows Phone 7 Isolated Storage Explorer」などがあります。


 今回はフリーソフトの「Empressia Windows Phone Tool」を利用してみましょう。Empressia Windows Phone ToolはVectorからダウンロードできます。

 Empressia Windows Phone ToolはIsolated Storage Explorer ToolsのGUIアプリです。まずは、取り込みをクリックして、分離ストレージを参照したいアプリの「WMAppManifest.xml」を選択します。

 リモート表示更新をクリックし、少し待ちます。しばらくすると分離ストレージが階層化されて表示されます。ここではpreview.jpgが確認できました。ローカルからリモートへファイルを保存したり、リモートからローカルへファイルを取り出すことも可能です。

Empressia Windows Phone ToolはIsolated Storage Explorer Toolsを使った分離ストレージの参照 Empressia Windows Phone ToolはIsolated Storage Explorer Toolsを使った分離ストレージの参照

カメラを使ってAR(拡張現実)アプリも

 今回はカメラプレビューの利用と3種類の出力について紹介しました。今回のアプリのソースコードは、こちらからダウンロードできます

 オープンソースの集約サイト「CodePlex」には、いくつかカメラプレビューを使ったライブラリがあり、例えばSilverlightAR(拡張現実)を実現できるライブラリ「SLARToolkit」などはWindows Phoneでも利用できます。


 また、カメラやセンサを手軽に利用できるのはスマートフォンの強みです。iPhoneAndroidにはカメラを使ったアプリが多くあるので、著作権を侵さない程度でWindows Phoneアプリ開発の参考にしてみてはいかがでしょうか。

著者紹介

Windows Phone Arch代表

泉本優輝

UIデザインからプログラミング、表現までやりたい、自称クリエイティブデザイナ

“さわってみたい”を創ることが目標。フィジカルコンピューティングなどの試作を行う傍ら、コミュニティ活動ではExpression Blendを中心としたセッションを行っている



前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。