CountDownControlを使ってカウントダウン後にカメラのシャッターを切る
次に、ソリューションエクスプローラー内のMainWindow.xamlを展開して表示される、MainWindow.xaml.vbをダブルクリックしてリスト2のコードを記述します。
ロジックコードを記述する
リスト2 (MainWindow.xaml.vb)
写真、オーディオの録音とビデオのキャプチャを提供するクラスの含まれるWindows.Media.Captur名前空間をインポートします。
Imports Windows.Media.Capture
ファイル、フォルダー、およびアプリケーションの設定を管理するクラスの含まれる、Windows.Storage名前空間をインポートします。
Imports Windows.Storage
プロパティのメディア フォーマットを作成するために必要な、その他のプログラミング要素を提供するクラスの含まれる、Windows.Media.MediaProperties名前空間をインポートします。
Imports Windows.Media.MediaProperties
シーケンシャルとランダム アクセスのストリームの読み書きを提供するクラスの含まれる、Windows.Storage.Streams名前空間をインポートします。
Imports Windows.Storage.Streams
ユーザーが HTTP 経由の最新の Web サービスを実行できるようにする HTTP のクライアント コンポーネント。クライアントとサーバーの両方で使用できる HTTP のコンポーネントを提供するクラスの含まれるSystem.Net.Http名前空間をインポートします。
Imports System.Net.Http
ネットワークアプリケーションで使用される、ホスト名やエンドポイントにアクセスを提供するクラスの含まれる、Windows.Networking名前空間をインポートします。
Imports Windows.Networking
パスコード、パスフレーズ、およびその他の識別情報を管理する共通の方法を提供するクラスの含まれる、Windows.Security.Credentials名前空間をインポートします。
Imports Windows.Security.Credentials
アプリ内でダウンロードしたり、アップロードしたりする機能を提供するクラスの含まれる、Windows.Networking.BackgroundTransfer名前空間をインポートします。
Imports Windows.Networking.BackgroundTransfer
XMLドキュメントモデル(DOM)をサポートするクラスの含まれる、Windows.Data.Xml.Dom名前空間をインポートします。
Imports Windows.Data.Xml.Dom Public NotInheritable Class MainPage Inherits Page
ファイルを表すインターフェース型のIReadonlyList型のメンバ変数myPictureFilesを宣言します。IReadonlyList(Of Out T)はインデックスでアクセスできる要素の読み取り専用コレクションを表します。
Dim myPictureFiles As IReadOnlyList(Of IStorageFile)
新しいMediaCaptureクラスの型のmyMediaCaptureオブジェクトを作成し、メンバ変数として宣言します。MediaCaptureクラスは、フォト、オーディオ録音、およびビデオキャプチャを表すクラスです。
Dim myMediaCapture As New MediaCapture Dim Index As Integer
ページがアクティブになった時の処理
InitializeAsyncメソッドでMediaCaptureを初期化します。CaptureElementのSourceプロパティにMediaCaptureのインスタンスmyMediaCaptureオブジェクトを指定します。StartPreviewAsyncメソッドでプレビューを開始します。Webカメラが表示されます。
ピクチャライブラリのPhotoImageサブフォルダー内の画像一覧を、GridViewに追加するAddPhotoプロシージャを実行します。
非同期処理に行われるため、メソッドの先頭にAsyncを追加します。
Protected Overrides Async Sub OnNavigatedTo(e As Navigation.NavigationEventArgs) Await myMediaCapture.InitializeAsync() CaptureElement1.Source = myMediaCapture Await myMediaCapture.StartPreviewAsync AddPhoto() End Sub
ピクチャライブラリのPhotoImageサブフォルダー内の画像一覧を表示する処理
ピクチャライブラリにアクセスします。CreateFolderAsyncでPhotoImageサブフォルダーを作成しますが、CreationCollisionOption.OpenIfExistsを指定することで、既にフォルダーが存在する場合は、そのフォルダー名を返してくれます。フォルダーが存在しない場合は作成してくれます。
ピクチャライブラリのPhotoImageサブフォルダーにアクセスします。CreationCollisionOption列挙体については下記URLを参照してください。
→ CreationCollisionOption enumeration (Windows)
GetFileAsyncメソッドでPhotoImageサブフォルダー内のファイルを取得し、ファイルのコレクションを表すメンバ変数myPictureFilesに格納しておきます。
コレクション変数myPictureFiles内のファイルを変数myPhotoFileに格納しながら、以下の処理を反復します。
新しいBitmapImageのインスタンスmyBmpオブジェクトを作成し、SetSourceメソッドに、Await myPhotoFile.OpenSequentialReadAsyncと指定して、アクセス用のストリームを順次開いていきます。
新しいImageのインスタンスmyImageオブジェクトを作成します。Widthに320、Heightに240と指定します。ImageのSourceプロパティにストリームを開いているmyBmpオブジェクトを指定します。GridViewのAddメソッドでmyImageオブジェクトを追加していきます。これで、PhotoImageサブフォルダー内に画像があれば、画像の一覧が表示されます。ない場合は何も表示されません。
非同期処理に行われるため、メソッドの先頭にAsyncを追加します。
Private Async Sub AddPhoto() Dim myFolder As StorageFolder = Windows.Storage.KnownFolders.PicturesLibrary Dim mySubFolder = Await myFolder.CreateFolderAsync("PhotoImage", CreationCollisionOption.OpenIfExists) myPictureFiles = Await mySubFolder.GetFilesAsync() For Each myPhotoFile In myPictureFiles Dim bmp As New BitmapImage bmp.SetSource(Await myPhotoFile.OpenSequentialReadAsync) Dim myImage As New Image myImage.Width = 320 myImage.Height = 240 myImage.Source = bmp GridView1.Items.Add(myImage) Next End Sub
[シャッター]ボタンがクリックされた時の処理
CountdownControlの秒数を設定するSecondプロパティに5を指定し、カウントダウンを5秒とします。
Private Sub Button1_Click(sender As Object, e As RoutedEventArgs) Handles Button1.Click TextBlock1.Text = String.Empty CountdownControl1.Seconds = 5 End Sub
カウントダウンが終わった時の処理。
MediaElementのPlayメソッドでシャッター音を再生します。
画像を保存するPhotoSaveプロシージャを実行します。
Private Sub CountdownControl1_CountdownComplete(sender As Object, e As RoutedEventArgs) Handles CountdownControl1.CountdownComplete MediaElement1.Play() TextBlock1.Text = "保存しました。" PhotoSave() End Sub
Webカメラで撮った画像を保存する処理
ピクチャライブラリのPhotoImageというサブフォルダーにアクセスします。
CreateFileAsyncで「年月日時間秒分.jpg」ファイルを作成し、myFile変数で参照しておきます。
イメージストリームの書式を表すImageEncodingPropertiesクラスの新しいインスタンス、myImageEncodingPropertyオブジェクトを作成します。
フォーマットのサブタイプを設定するSubTypeプロパティに「Jpeg」と指定します。
WidthとHeightの値を指定します。
CapturePhotoToStorageFileAsyncメソッドで、出力イメージのエンコードプロパティ(Jpgで640×480)と、保存する画像ファイル名、とを指定して、ストレージファイルにフォトをキャプチャします。
非同期処理で行われるためメソッドの先頭にAsyncを追加します。
Private Async Sub PhotoSave() Dim myFolder As StorageFolder = Windows.Storage.KnownFolders.PicturesLibrary Dim mySubFolder = Await myFolder.CreateFolderAsync("PhotoImage", CreationCollisionOption.OpenIfExists) Dim myFile As StorageFile = Await mySubFolder.CreateFileAsync(DateTime.Now.ToString("yyyyMMddHHmmss") & ".jpg") Dim myImageEncodingProperty As New ImageEncodingProperties myImageEncodingProperty.Subtype = "jpeg" myImageEncodingProperty.Width = 640 myImageEncodingProperty.Height = 480 Await myMediaCapture.CapturePhotoToStorageFileAsync(myImageEncodingProperty, myFile) End Sub
CountDownControlを使ってカウントダウン後にカメラのシャッターを切る
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- 場所と写真を記録するプログラムを作って思い出のシーンを保存しよう
- Webカメラで撮影した写真をセピア調に演出するアプリを作る
- 撮影した写真の管理ができるマイフォトアプリを作る
- 画像に各種フィルタを適用して保存するWindowsアプリを作る
- 画像の一覧表示と、ListBoxに表示されたYoutubeの再生を試す
- PCで撮影した写真を並べて最適な1枚を選べるプログラムをつくる
- ピクチャライブラリ内の画像を指定して表示する+1つのサンプル
- ListBoxに表示された画像をポップアップメニューから削除する+1つのサンプル
- ポップアップメニューから各種コントロールを表示する
- 写真と現在位置を入れた画像日記アプリを作る