Capturer une image

Cette page explique comment capturer des images de haute qualité avec CameraX. Pour ce faire, utilisez la classe ImageCapture et ses méthodes associées.

Concepts clés

Voici les principaux concepts abordés dans ce document :

  • Méthode de stockage : vous pouvez capturer des images dans un tampon en mémoire ou directement dans un fichier.
  • Exécuteurs : ImageCapture utilise des exécuteurs pour gérer les rappels et les opérations d'E/S. Vous pouvez personnaliser ces exécuteurs pour améliorer les performances et le contrôle.
  • Modes de capture : vous pouvez configurer le mode de capture pour optimiser la latence ou la qualité d'image.

Méthode de stockage

Il existe deux façons de capturer des images avec ImageCapture. Chacun d'eux utilise une surcharge de ImageCapture.takePicture() :

Exécuteurs

Lorsque vous appelez takePicture, vous transmettez un Executor et une fonction OnImageCapturedCallback ou OnImageSavedCallback. Executor exécute le rappel et gère les E/S résultantes.

Prendre une photo

Pour prendre une photo, vous configurez l'appareil photo, puis appelez takePicture.

Configurer la caméra

Pour configurer la caméra, créez un CameraProvider. Créez ensuite un objet ImageCapture. Utiliser ImageCapture.Builder() :

Kotlin

val imageCapture = ImageCapture.Builder()
    .setTargetRotation(view.display.rotation)
    .build()

cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture, preview)

Java

ImageCapture imageCapture =
    new ImageCapture.Builder()
        .setTargetRotation(view.getDisplay().getRotation())
        .build();

cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture, preview);

Prendre une photo

Une fois l'appareil photo configuré, appelez takePicture() pour capturer une image. Cet exemple montre comment utiliser takePicture() pour enregistrer une image sur le disque :

Kotlin

fun onClick() {
    val outputFileOptions = ImageCapture.OutputFileOptions.Builder(File(...)).build()
    imageCapture.takePicture(outputFileOptions, cameraExecutor,
        object : ImageCapture.OnImageSavedCallback {
            override fun onError(error: ImageCaptureException)
            {
                // insert your code here.
            }
            override fun onImageSaved(outputFileResults: ImageCapture.OutputFileResults) {
                // insert your code here.
            }
        })
}

Java

public void onClick() {
    ImageCapture.OutputFileOptions outputFileOptions =
            new ImageCapture.OutputFileOptions.Builder(new File(...)).build();
    imageCapture.takePicture(outputFileOptions, cameraExecutor,
        new ImageCapture.OnImageSavedCallback() {
            @Override
            public void onImageSaved(ImageCapture.OutputFileResults outputFileResults) {
                // insert your code here.
            }
            @Override
            public void onError(ImageCaptureException error) {
                // insert your code here.
            }
       }
    );
}

Voici les points clés concernant cet extrait :

  • L'icône ImageCapture.OutputFileOptions vous permet de configurer l'emplacement d'enregistrement et les métadonnées.
    • Ici, OutputFileOptions.Builder() utilise un objet File pour déterminer l'emplacement de l'enregistrement.
  • La fonction takePicture() capture l'image de manière asynchrone à l'aide des options et de l'exécuteur fournis.
  • OnImageSavedCallback fournit des rappels en cas de réussite ou d'échec.
    • Le rappel onImageSaved() gère la capture d'image réussie et donne accès aux résultats des images enregistrées.
    • Le rappel onError() gère les erreurs de capture d'image.

Options supplémentaires

Consultez le guide de configuration pour l'optimisation, Flash et le format de fichier pour découvrir d'autres façons de configurer ImageCapture.

Autres ressources

Pour en savoir plus sur CameraX, consultez les ressources suivantes :

Atelier de programmation

  • Premiers pas avec CameraX
  • Exemple de code

  • Applications exemples de CameraX