Androidアプリの開発をしよう04 マルチメディア④-2

カメラを使う-つづき-

実機が必要です!

目次

  1. 前回のつづき
  2. プログラムの解説
  3. さいごに

前回のつづき

前回はコードが長すぎたので解説を後回しにしました。
私の記事を読んでくださっている皆さんには大変ご迷惑をかけました。
では、始めたいと思います。

プログラムの解説

このアプリは大きく分けて5つの項目からなっています。

これらを順番に見ていきましょう。

    カメラの準備(プレビュー画面の準備)

    プレビュー画面を表示するにはサーフェステクスチャ(SurfaceTexture)クラスを使います。
    サーフェス(Surface)はカメラプレビューなどの高速描画を行うためのクラスです。
    まず、サーフェステクスチャが作成されたタイミングで呼び出されるリスナを用意します。

    プレビュー画面の生成

    次にプレビューを行うためのキャプチャリクエストを作成します。
    そのためには、カメラクラスのcreateCaptureCallback()メソッドの引数として「CameraDevice.TEMPLATE_PREVIEW」(プレビュー)を指定し、ビルダにサーフェスを設定しておきます。
    また、カメラの状態が変わったときに呼び出されるリスナ(コールバック関数とよびます)として、CameraDevice.StateCallbackクラスを使った無名クラスを使います。

    プレビューの開始

    CameraCaptureSession.StateCallbackクラスのonConfigured()メソッド(Sessionが変化したときに呼び出されるコールバック関数)が呼び出される際に、プレビューを開始します。
    このためにセッションのsetRepeatingRequest()を呼び出し、プレビューの開始をします。

    写真の撮影

    写真を撮影するには写真撮影に必要なキャプチャリクエストを作成します。
    カメラクラスのcreateCaptureRequest()メソッドの引数として、「CameraDevice.TEMPLATE_STILL_CAPTURE」(静止画像)を指定します。
    写真撮影にはビルダに様々な設定をします。
    まず、画面表示のサーフェスと写真撮影のサーフェスの2つを設定する必要があります。
    また、写真の向きも指定します。
    そして保存画像が利用できるようになった時に呼び出されるImageReader.OnImageAvailableListenerを定義しておきます。
    createCaptureSession()メソッドを呼び出すと、撮影のためのセッションが開かれます。
    撮影はキャプチャセッションのcapture()メソッドで行います。

    写真の保存

    写真画像が利用可能になった時に保存処理を行います。
    ImageReaderクラスのacquireLatestImage()メソッドでイメージを取得し、バッファに読み込んだ上でファイルに保存します。
    また、ここではToastクラスを利用してメッセージの表示を行いギャラリーに登録しています。
    ギャラリーはAndroid5.0未満の端末に用意されている機能で、Android5.0では意味がありませんので、削除しても構いません。
    撮影が完了した時点で、プレビューの再開をします。

さいごに

カメラを使うには多くのクラスが必要で大変だと思います。
実はもう少し簡単な方法があるのですが、少し関連クラスも知っておくとこの後が楽だと思い、このようコードにしてみました。

このサイトをフォローする!