Capturer une image

Cette page explique comment prendre 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é de l'image.

Méthode de stockage

Il existe deux façons de capturer des images avec ImageCapture. Ils utilisent chacun 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 toute E/S qui en résulte.

Prendre une photo

Pour prendre une photo, 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. Utilisez 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 prendre une photo. Cet exemple montre comment utiliser takePicture() pour enregistrer une image sur 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 de cet extrait:

  • 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 d'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 et d'échec.
    • Le rappel onImageSaved() gère la capture d'image réussie et fournit un accès aux résultats de l'image enregistrée.
    • Le rappel onError() gère les erreurs de capture d'image.

Options supplémentaires

Consultez le guide de configuration pour l'optimisation, le 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