web-dev-qa-db-fra.com

Android Camera2 front camera

J'ai récemment remarqué que l'API Camera est obsolète et j'ai trouvé la nouvelle API appelée Camera2.

J'ai lu la documentation mais je ne la comprends pas vraiment.

Ma question est donc la suivante: comment prévisualiser la caméra avant avec la nouvelle API de la caméra?

Juste un aperçu, pas un enregistrement.

Je veux utiliser cette nouvelle API, car à l'avenir, je suppose que l'API Camera actuelle sera remplacée et cessera de fonctionner.

Je veux donc être préparé et simplement m'asseoir et regarder pendant que tout le monde panique. XD

17
YOYOYO

Tout d'abord, découvrez l'identifiant de votre caméra frontale (si elle en a bien sûr une)

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

Ensuite, trouvez la faceCamera comme ceci:

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;

Enfin, vous devez régler la caméra avec cet identifiant:

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

Notez que ce ne sont que des conseils sur la façon de faire ce que vous voulez faire. Pour plus de détails sur la façon de démarrer un aperçu et plus, consultez: http://developer.Android.com/samples/Camera2Basic/index.html

20
user0770

0 pour l'arrière 1 pour l'avant

Pour Retour Appareil photo, nous devons le faire à l'intérieur méthode openCamera :

cameraId = manager.getCameraIdList () [0];

Pour la caméra frontale avant , nous devons ajouter cette ligne ci-dessous à l'intérieur openCamera méthode:

cameraId = manager.getCameraIdList () [1];

J'ai ajouté tous les codes et la capture d'écran ici

enter image description here

11
Ted

J'ai utilisé le code de l'exemple de l'API Google Camera2 avec quelques modifications pour faire fonctionner les caméras avant et arrière, y compris l'enregistrement local des images et la modification de la forme de TextureView à l'aide d'une superposition.

J'ai également traité la rotation des images en utilisant l'interface exif.

Il y a pas mal de code donc je vais poster un lien vers mon dépôt GitHub:

https://github.com/craigspicer/Camera2API

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

0
Craig

Nous pouvons obtenir les caractéristiques des caméras dans notre appareil

   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();
       }

   }

une de ces caractéristiques est Android.lens.facing, donc en fonction de cette valeur, nous pouvons obtenir la caméra frontale:

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

Il s'agit d'une méthode pour obtenir cette valeur:

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";
}

la plupart du temps, l'identifiant de la caméra frontale est 1.

0
Jorgesys