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 :
ImageCaptureutilise 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() :
Fichier : utilisez
takePicture(OutputFileOptions, Executor, OnImageSavedCallback)pour enregistrer l'image capturée directement dans un fichier sur le disque.- Il s'agit de la méthode la plus courante pour prendre des photos.
En mémoire : utilisez
takePicture(Executor, OnImageCapturedCallback)pour recevoir un tampon en mémoire de l'image capturée.- Cela est utile pour le traitement ou l'analyse d'images en temps réel.
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.OutputFileOptionsvous permet de configurer l'emplacement d'enregistrement et les métadonnées.- Ici,
OutputFileOptions.Builder()utilise un objetFilepour déterminer l'emplacement de l'enregistrement.
- Ici,
- La fonction
takePicture()capture l'image de manière asynchrone à l'aide des options et de l'exécuteur fournis. OnImageSavedCallbackfournit 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.
- Le rappel
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
Exemple de code