Camera機能の使用方法|Android開発

AndroidでCamera(android.hardware.Camera)機能の使用方法です。
なお、android.hardware.CameraはAPI level 21からdeprecatedです。

permissionの追加

カメラを使用するためにはAndroidManifest.xmlで以下を指定する必要があります。

<uses-permission android:name="android.permission.CAMERA"></uses-permission>

layout

プレビュー表示を行うためのSurfaceViewを用意します。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:tools="http://schemas.android.com/tools"
             android:layout_width="match_parent"
             android:layout_height="match_parent">

    <SurfaceView
        android:id="@+id/camera_v1_surface"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="visible"/>

</FrameLayout>

カメラの利用手順

準備

  1. 生成したSurfaceViewインスタンスからSurfaceHolderを取得、保持します
    SurfaceHolder mHolder = {SurfaceViewインスタンス}.getHolder();
    
  2. SurfaceHolderSurfaceHolder.Callbackを設定します
    mHolder.addCallback(mSurfaceHolderCallback);
    
    SurfaceHolder.Callback mSurfaceHolderCallback = new SurfaceHolder.Callback() {...};
    
  3. SurfaceHolder.Callback.surfaceChanged()
    本メソッド受信以降でカメラのオープン処理を行います

カメラのオープン

カメラのオープンを行います。オープンするカメラのIDを指定します。

Camera mCamera = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK);

プレビューの開始

  1. プレビュー領域を指定します。指定するのは先程取得したSurfaceHolderです
    mCamera.setPreviewDisplay(mHolder);
    
  2. 必要なパラメータを設定します(下記はサンプル)
    Camera.Parameters parameters = mCamera.getParameters();
    // プレビューサイズ.
    parameters.setPreviewSize(1280, 720);
    // 撮影サイズ.
    parameters.setPictureSize(1920, 1080);
    mCamera.setParameters(parameters);
    
  3. ディスプレイの角度を指定することで、プレビューの向きを調整します
    mCamera.setDisplayOrientation(degrees);
    
  4. setPreviewCallback()でプレビュー中の画像データを受信できます(必要な場合のみ)
    mCamera.setPreviewCallback(mPreviewCallback);
    
    Camera.PreviewCallback mPreviewCallback = new Camera.PreviewCallback() {...};
    
  5. プレビューを開始します
    mCamera.startPreview();
    
[2017.04.21追記]プレビュー画像を取得する別の方法
Cameraプレビュー画像を取得する|Android開発

撮影

  1. 必要なパラメータを設定します(下記はサンプル)
    Camera.Parameters parameters = mCamera.getParameters();
    // 撮影画像の角度.
    parameters.setRotation(rotation);
    mCamera.setParameters(parameters);
    
  2. 撮影を開始します。撮影後のデータ形式毎にコールバックが指定できます(下記はJpegを指定)
    mCamera.takePicture(null, null, mTakePictureJpeg);
    
    Camera.PictureCallback mTakePictureJpeg = new Camera.PictureCallback() {...};
    
  3. コールバックに通知された撮影画像を処理します(保存など)
    上記の場合、Camera.PictureCallback.onPictureTaken(byte[] data, Camera camera)で受信します

カメラのクローズ

  1. setPreviewCallback()でプレビュー中の画像データを受信していた場合は通知を解除します
    mCamera.setPreviewCallback(null);
    
  2. プレビューの停止(必須ではないようです)
    mCamera.stopPreview();
    
  3. カメラの解放を行います
    mCamera.release();
    
このエントリーをはてなブックマークに追加
にほんブログ村 IT技術ブログへ

コメント

メールアドレスが公開されることはありません。 が付いている欄は必須項目です