web-dev-qa-db-ja.com

Android Camera2フロントカメラ

最近、Camera APIが廃止されていることに気付き、Camera2という新しいAPIを見つけました。

ドキュメントを読みましたが、よくわかりません。

だから私の質問です:新しいカメラAPIでフロントカメラをプレビューするにはどうすればよいですか?

録画ではなくプレビューのみ。

この新しいAPIを使用したいのは、将来的には現在のCamera APIが置き換えられて機能しなくなると予想しているためです。

だから私は準備をして、誰もがパニックになっている間、ただ座って見たいと思っています。 XD

17
YOYOYO

まず、フロントカメラのIDを確認します(もちろん、それがある場合)。

    CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE);
            try {
                return manager.getCameraIdList();
            } catch (CameraAccessException e) {
                return null;
            }

次に、次のようにfaceCameraを見つけます。

CameraCharacteristics cameraCharacteristics = manager.getCameraCharacteristics(cameraId);

        if (cameraCharacteristics == null)
            throw new NullPointerException("No camera with id " + cameraId);

        return cameraCharacteristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_FRONT;

最後に、そのIDでカメラを設定する必要があります。

CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE);
   try {
       characteristics = manager.getCameraCharacteristics(mCameraId);
   }  catch (CameraAccessException e) {
       e.printStackTrace();
   } 

注:これらは、やりたいことを行うためのヒントにすぎません。プレビューの開始方法などの詳細については、以下を参照してください http://developer.Android.com/samples/Camera2Basic/index.html

20
user0770

背面は0、前面は1

Backカメラの場合、これはopenCameraメソッド内で行う必要があります。

cameraId = manager.getCameraIdList()[0];

Frontカメラに面している場合、これをopenCameraの内側の行の下に追加する必要があります方法:

cameraId = manager.getCameraIdList()[1];

すべてのコードとスクリーンショットを追加しました ここ

enter image description here

11
Ted

画像をローカルに保存したり、オーバーレイを使用してTextureViewの形状を変更したりするなど、フロントカメラとバックカメラを機能させるためにいくつかの変更を加えたGoogle Camera2 APIサンプルのコードを使用しました。

Exifインターフェースを使用して画像の回転も処理しました。

かなりのコードがあるので、GitHubリポジトリへのリンクを投稿します。

https://github.com/craigspicer/Camera2API

https://nullparams.com/camera-2-api-tutorial/

0
Craig

デバイスのカメラの特性を取得できます

   private void getCameraCharacteristics (){
       try {
       CameraManager manager=(CameraManager)getSystemService(Context.CAMERA_SERVICE);
           for(String id : manager.getCameraIdList()){
               Log.e(TAG, "Camara: Id " + id );
               CameraCharacteristics cameraCharacteristics = manager.getCameraCharacteristics(id);
               List<CameraCharacteristics.Key<?>> listaCaracteristicas = cameraCharacteristics.getKeys();
               for(CameraCharacteristics.Key<?> caracteristica : listaCaracteristicas){
                   Log.i(TAG,  "caracteristic: " + caracteristica.getName()  + " : " + cameraCharacteristics.get(caracteristica));
               }
               Log.i(TAG, listaCaracteristicas.toString());
           }
       } catch (CameraAccessException e) {
           e.printStackTrace();
       }

   }

この特性の1つはAndroid.lens.facing、この値に基づいて、正面カメラを取得できます。

 if(cameraCharacteristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_FRONT){
              //Frontal camera
  }

これはこの値を取得するメソッドです:

private String getIdFrontalCamera () {
    try {
        CameraManager manager=(CameraManager)getSystemService(Context.CAMERA_SERVICE);
        for(String id : manager.getCameraIdList()){
            CameraCharacteristics cameraCharacteristics = manager.getCameraCharacteristics(id);
            //Seek frontal camera.
            if(cameraCharacteristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_FRONT){
                Log.i(TAG, "Camara frontal id " + id);
                return id;
            }
        }
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }
    return "0";
}

ほとんどの場合、正面カメラのIDは1です。

0
Jorgesys