Windows 8 Store Applicationプログラミング(応用編) 1

マイク、ピクチャライブラリ、Webカメラへのアクセス許可の設定

マイク、ピクチャライブラリ、Webカメラへのアクセス許可の設定

今回のサンプルは、ピクチャライブラリにアクセスしますので、「画像ライブラリ」へのアクセス許可が必要になります。ソリューションエクスプローラー内にpackage.appxmanifestというファイルがありますので、このファイルをダブルクリックします。「機能」タブをクリックして、表示される画面の「機能:」にある、「マイク」、「画像ライブラリ」、「Webカメラ」にチェックを付けます(図3)。

図3:package.appxmanifestファイルを開き「マイク」、「画像ライブラリ」、「Webカメラ」にチェックを付ける(クリックで拡大)

次に、ソリューションエクスプローラー内のMainWindow.xamlを展開して表示される、MainWindow.xaml.vbをダブルクリックしてリスト2のコードを記述します。

ロジックコードを記述する

リスト2 (MainWindow.xaml.vb)

Option Strict On

PopupMenuであるコンテキストメニューを表示させるのに必要なクラスの含まれる、Windows.UI.Popups名前空間をインポートします。

Imports Windows.UI.Popups

写真、オーディオの録音とビデオのキャプチャを提供するクラスの含まれる、Windows.Media.Capture名前空間をインポートします。

Imports Windows.Media.Capture

ファイル、フォルダー、およびアプリケーションの設定を管理するクラスの含まれる、Windows.Storage名前空間をインポートします。

Imports Windows.Storage

Public NotInheritable Class MainPage
  Inherits Page

写真、オーディオの録音やビデオをキャプチャするMediaCaptureクラス型のメンバ変数、myMediaCaptureを宣言します。

Dim myMediaCapture As MediaCapture

インデックスでアクセスできる読み取り専用のファイルのコレクションを表すインターフェースである、IReadOnlyList(Of IStorageFile)型のメンバ変数、myPictureFilesを宣言します。

  Dim myPictureFiles As IReadOnlyList(Of IStorageFile)

LayoutRootという名前のGrid上にポインターがあった時、右タップの入力刺激があった時の処理

2次元空間でのXとY座標のペアを表すPoint構造体を、右タップされた時点のXとY座標で初期化します。-540は位置合わせのための数値です。

LayoutRootの描画時の幅と高さで初期化された、新しいSizeのインスタンスmySizeオブジェクトを作成します。Size構造体はオブジェクトの幅と高さを表します。

四角形の幅、高さ、および原点を表すRect構造体を、Point構造体のオブジェクトmyPointと、Size構造体のオブジェクトmySizeで初期化した、新しいRectのインスタンス、myRectオブジェクトを作成します。

ポップアップメニューを表すPopupMenuクラスのインスタンス、myPopupオブジェクトを作成します。

Command.Addメソッドで、PopupMenuに項目名と、その項目をタップした際のコマンドを追加します。UICommandクラスは、コンテキストメニュー内のコマンドを表します。PopupMenuに「Webカメラ」、「画像一覧」、「全クリア」の項目を追加し、それらに対するコマンドを追加します。

ShowForSelectionAsyncメソッドで、指定された選択項目を基準とする適切な位置に、コンテキストメニューを表示します。この場合はLayoutRoot内で右タップがされた位置の左側(Placement.Left)にコンテキストメニューが表示されます。Placement列挙体については、下記のURLを参考にしてください。
→ Placement enumeration (Windows)

非同期処理で行われるため、メソッドの先頭にAsyncを追加します。Asyncが追加されていると、その処理が非同期で行われることを意味します。

  Private Async Sub LayoutRoot_RightTapped(sender As Object, e As RightTappedRoutedEventArgs) Handles LayoutRoot.RightTapped
    Dim myPoint As Point = New Point(e.GetPosition(LayoutRoot).X, e.GetPosition(LayoutRoot).Y - 540)
    Dim mySize As New Size(LayoutRoot.ActualWidth, LayoutRoot.ActualHeight)
    Dim myRect As New Rect(myPoint, mySize)
 
    Dim myPopup As New PopupMenu

    myPopup.Commands.Add(New UICommand("Web カメラ", Sub(command)
                                                          ShowWebCamera()
                                                        End Sub))
    myPopup.Commands.Add(New UICommand("画像一覧", Sub(command)
                                                          ShowImage()
                                                        End Sub))
    myPopup.Commands.Add(New UICommand("全クリア", Sub(command)
                                                          AllClear()
                                                        End Sub))
    Await myPopup.ShowForSelectionAsync(myRect, Placement.Left)
  End Sub
この記事のキーワード

この記事をシェアしてください

人気記事トップ10

人気記事ランキングをもっと見る