第8回 C#で自作Android アプリを作ろう:カメラ機能を使おう | ITオフィスサポートとシステム開発|システムガーディアン AWSクラウド導入|東京都中央区八丁堀

ITサポート出張、ITシステム開発・保守をワンストップで|AWSクラウド|東京都中央区八丁堀

ITオフィスサポートとシステム開発|システムガーディアン AWSクラウド導入|東京都中央区八丁堀

電話でのお問い合わせ

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

      2017/01/11

技術顧問の増田です。
少し間が空いてしまいましたが、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 で読み込めるので、これを加工してサーバーに送るツールができそうですね。次回は、撮影した画像を加工する部分を作ってみましょう。

次回もお楽しみに。

増田増田 ( 技術顧問 )@moonmile, Microsoft MVP
システムガーディアン技術顧問
趣味はセミアコでブルースを弾くことと農園でラズベリーを育てることとF#でプログラミングすること。仕事は、ええ、びしびしとプログラミング技術を鍛えることと、ばしばしとC#でプログラムコードを書くことです。

 - Xamarin

  関連記事

xamarin-android-title
第4回 C#で自作Android アプリを作ろう:RSSを取得してリスト表示

技術顧問の増田です。今回はもう少し本格的な Android アプリの制作ということで、RSS を扱います。ニュースや新着情報を取得するために一世風靡した RSS …

xamarin-android-title
第3回 C#で自作Android アプリを作ろう:時計アプリを作る

技術顧問の増田です。第1,2回と Visual Studio で Android アプリを作る準備ができたところで、いよいよ本格的に Android アプリを作 …

xamarin-android-title
第2回 C#で自作Android アプリを作ろう:試験運用編

引き続き、技術顧問の増田です。第1回で準備ができたので、試験運用的に動かしてみようってのが第2回の主旨です。 前回は Github からコードを取ってきて、さっ …

xamarin-android-title
第1回 C#で自作Android アプリを作ろう:出帆準備編

技術顧問の増田です。システムエンジニアの会社にプログラミングを定着する役目を担っていますが、さて、プログラミングの初歩から学んでも面白くないし、実践的ではない。 …

xamarin-android-title
第6回 C#で自作Android アプリを作ろう:Twitter APIでファボリストを取得

技術顧問の増田です。前回は、路線APIを使って、生のWeb APIを使ってデータを取得しましたが、いちいちJSON形式やXML形式のデータを分解していくのは手間 …

xamarin-android-title
第5回 C#で自作Android アプリを作ろう:Web APIで路線情報を表示

技術顧問の増田です。前回は、固定URLを使って RSS を取得してリストにして表示させました。今回は、もう少し発展させて Web API を使ってリストに表示す …

xamarin-android-title
第7回 C#で自作Android アプリを作ろう:簡易アンケートを作ろう

技術顧問の増田です。 前回までは、Web API を使ってサーバーからデータを取得する機能を使ってアプリを作ってきました。今回は、その逆で、Web API を使 …

トップページ