第8回 C#で自作Android アプリを作ろう:カメラ機能を使おう

  • 2017年1月11日
  • 2017年11月1日
  • Xamarin
  • 5880view

技術顧問の増田です。
少し間が空いてしまいましたが、Xamarin.Android の続きのお話をしましょう。いままでは、Xamarin を使ってスマートフォンの一般的な機能(画面出力やWeb APIなど)を使ってきましたが、今回からは少し Android 特有の機能を使っていきます。いわゆる、エミュレーターではなくて実機を使ったプログラミングが必要なところです。

最初は、Android のカメラ機能を利用してみましょう。サンプルコードは https://github.com/moonmile/sg-xamarin-sample の sgCamera フォルダーにあります。

 

バックナンバー

 

スマホでカメラを使う

スマートフォンのカメラの扱い方は、それぞれのスマートフォン(Android/iOS/Windows)によって異なるので、共通プラットフォーム(Xamarin.Forms)を使うのではなく、個別のコードを書くことになります。共通コードを書くことも不可能ではないのだけど、カスタムレンダラを使ったり画面遷移がOSごとに異なっていたり保存先のフォルダが云々という差があるので、個別で使うのであれば個別に作ってしまったほうが手っ取り早いってことなんですけどね。一応、Xamarin.Media を使うとできるようなことも書いてあるのですが、今回は、以下のサンプルを使って Xamarin.Android で作っていきましょう。

Take a Picture and Save Using Camera App – Xamarin
https://developer.xamarin.com/recipes/android/other_ux/camera_intent/take_a_picture_and_save_using_camera_app/

Android のカメラ機能を使うと、

  1. 撮影を開始する。
  2. 撮影する。
  3. 撮影した画像をファイルに保存する。
  4. プレビューのために保存したファイルを表示する。

という3手順が必要になります。実は、3のファイルに保存しない方法もあるのですが、解像度が小さい(160ドットぐらいしかない)ので使い物になりません。このため、Android では、Intent クラスを使って別のアクティビティを起動させます。ちょうどプログラム間の連携機能のようなものです。

撮影を開始する

自前のカメラアプリを作って撮影開始の「OPEN CAMERA」ボタンをタップしたときの処理を作ります。

  1. カメラ機能を呼び出すための MediaStore.ActionImageCapture でインテントを作成します。
  2. カメラで撮影したときのファイル名を作成しておきます。
  3. 起動するアクティビティ(ここではカメラ機能)にファイル名を渡します。
  4. アクティビティを起動します。ここではカメラ機能からの戻り値を取るために、StartActivityForResultメソッドを使っています。

ファイルに保存する

起動したカメラ機能で撮影をした後に、チェックボタンをタップして確定させるとファイルに保存されます。
ファイルに保存されると、OnActivityResult イベントが発生します。

保存した画像を表示する

  1. 保存したファイルを読み出すために Intent.ActionMediaScannerScanFile でインテントを作成します。
  2. ファイル名を指定して、ブロードキャストで通知します。Android の Gallay アプリに見えるようにするための処理です。
  3. 保存した画像ファイルをロードします。LoadAndResizeBitmap メソッドは、縦横のサイズをスマホの画面に合わせるための自作関数です。
  4. 取得した Android.Graphics.Bitmap オブジェクトを SetImageBitmap メソッドを使って画面に表示させます。

動作させると、こんな感じで撮影した画像が表示されるようになります。カメラ機能はエミュレーターを使っても動作させることが可能です。

実際の Android スマートフォンの場合は背面と前面のカメラがあるので、切り替えて撮影してみてください。画像のサイズが違うことがわかります。

まとめ

これで Xamarin.Android を使ってカメラ撮影できることが分かりました。画像ファイルは Android.Graphics.Bitmap で読み込めるので、これを加工してサーバーに送るツールができそうですね。次回は、撮影した画像を加工する部分を作ってみましょう。

次回もお楽しみに。

最新情報をチェックしよう!
>システム構築・保守に特化した会社です。

システム構築・保守に特化した会社です。

システムの構築・保守運用「システムガーディアン」 社内システム担当が欲しいが、専属で雇うほどの仕事量はない。 必要な時に必要なだけ頼りたいというお悩みを持つ企業様へ専門知識を持って対応を行っております。 サーバから各種システムまで自社・他社で構築されたシステムに対してサポートを行っております。

CTR IMG