
今回はPoweAppsのカメラオブジェクトについて見ていきます。
最近のアプリでは写真を使うことも多いですから、カメラオブジェクトの使い方をマスターしてアプリで写真を使いかなしていきましょう。
PowerAppsに必須の知識PowerFX対応の学習本はこちら
PowerApps学習の本命・実際のアプリももらえる学習本
PowerApps学習方法一覧

概要
カメラオブジェクトは、デバイスのカメラにアクセスすることで写真を撮影するオブジェクトになります。
もちろん、使っているデバイスにカメラがないと写真は撮れませんし、カメラの機能はデバイスに左右されますので、デバイスがどのようなカメラを使っているのかにも気を付けておかないといざという時に予定したものと違う挙動をする可能性もありますので気を付けてください。
配置方法
カメラオブジェクトは挿入タブ内のメディアと進み、カメラを選択することで配置することができます。

主要なプロパティ
カメラオブジェクトを操作するための主要なプロパティを紹介します。
Camera
Cameraプロパティはデバイスのどのカメラを使用するかを選択することができます。カメラの選択は0を含む数字で指定します。
最近のスマホでは、内側と外側、外側でも機能によって複数のカメラを搭載しているものも多いのでしっかりと選択させてあげないとデバイスによって内側のカメラしか使えない、外側のカメラしか使えないなどの問題が発生しますので、ドロップボックスなどで複数の数字を選択させてあげられるようにしておきましょう。
メインのカメラは0であることが多いです
Photo
写真を取得するためのプロパティになります。そのため、画像オブジェクトなどの画像を受け止めることのできるもので受け止めてあげることで撮影した写真を一時的に保管することができます。
StreamRate
Streamはカメラオブジェクトの写真を何ミリ秒おきに撮影するかを指定します。数字のデータ型で100 (0.1 秒)~3600000 (1 時間)で指定できます。
1秒間隔で撮影したい場合は1000と入力しましょう。
Stream
ストリーム撮影している画像を取得するためのプロパティになります。Photoと同じように画像オブジェクトで受け止めることができますがStreamRateで指定した秒数ごとにどんどん上書きされてしまいます。
OnSelect
カメラオブジェクトが押された時の挙動を入力します。
OnStrem
Streamで写真を撮影する際の挙動を表します。Streamで写真が撮影されるたびに挙動します。
使い方
撮影方法はプロパティで制御しません。アプリ起動時にカメラオブジェクトを選択した際(スマホだとタップした瞬間)に撮影されます。
また、撮影されたデータは画像型のデータになります。撮影したデータをアプリ終了後も保存しておきたい場合はSharePointに保存するなどの対策が必要になります。
通常のカメラのように使いたい場合はPhotoオブジェクトを使用し、定期的に撮影を行いたい場合はStreamを使用する必要があります。
具体例
ということで具体例を見てみましょう。
今回は
- 撮影した写真を画像オブジェクトに反映させる
- ストリーム撮影した写真をコレクションに保存するという方法を行ってみます。
撮影した写真を画像オブジェクトに反映させる
カメラオブジェクトを配置して、画像オブジェクトのImageプロパティに
カメラオブジェクト名.Photo
とすることで撮影した画像を画像オブジェクトに反映させることができます。このときはカメラオブジェクトを選択するたびに画像オブジェクトの写真内容が上書きされていきます。撮影した写真を保管したい場合はSharePointなどに保存するなど別途作業が必要になります。(エクセルのテーブルでは保存できませんでした。)
ストリーム撮影した写真をコレクションに保存する
カメラオブジェクトを配置して、StreamRateに5000と設定することで5秒ごとに撮影されるように設定します。
次にOnStreamプロパティに以下のように入力します。
Collect(Table,Camera4.Stream)
こうすることでTableというコレクションにStream撮影された写真がどんどん保管されていきます。
ただし、Stream撮影は、画面を開いた間はずっとStream写真を撮り続けることになってしまうのでボタンでON/OFFの制御を行いたいと思います。
この場合はRunStreamという変数にブーレーン型のデータを格納し、Trueの時は撮影、Falseの時は撮影しないように設定をしておきたいと思います。
そのためOnStreamプロパティはIf関数で制御しようと思います。
If(RunStream,Collect(Table,Camera4.Stream))
こうすることでOnStreamにTrueが入っているときだけコレクションにデータが格納されていきます。
ただしこれだけだとオフの制御ができないのでボタンオブジェクトのOnselectに
If(RunStream,UpdateContext({RunStream:false}),UpdateContext({RunStream:true}))
と入力することでボタンを押すたびにTrueとFalseを入れ替えます。Trueにした瞬間にどんどんとコレクションにデータが格納されていくことになります。
最後にRunStreamにはデフォルトでFalseを入れておきたいので画面のOnVisble属性に
UpdateContext({RunStream:false})
とすることで初期値がFalseになります。