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()
:
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 une mémoire 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 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 objetFile
pour déterminer l'emplacement d'enregistrement.
- Ici,
- 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.
- Le rappel
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
Exemple de code