Auf dieser Seite wird beschrieben, wie Sie mit CameraX hochwertige Bilder aufnehmen. Dazu verwenden Sie die Klasse ImageCapture und die zugehörigen Methoden.
Wichtige Konzepte
Im Folgenden werden die wichtigsten Konzepte erläutert, die in diesem Dokument behandelt werden:
- Speichermethode:Sie können Bilder entweder in einem In-Memory-Puffer oder direkt in einer Datei aufnehmen.
- Executors:
ImageCaptureverwendet Executors für die Verarbeitung von Callbacks und E/A-Vorgängen. Sie können diese Executors anpassen, um die Leistung und Steuerung zu verbessern. - Aufnahmemodi:Sie können den Aufnahmemodus so konfigurieren, dass entweder die Latenz oder die Bildqualität optimiert wird.
Speichermethode
Es gibt zwei Möglichkeiten, Bilder mit ImageCapture aufzunehmen. Für jede wird eine Überladung von ImageCapture.takePicture() verwendet:
Datei:Verwenden Sie
takePicture(OutputFileOptions, Executor, OnImageSavedCallback), um das aufgenommene Bild direkt in einer Datei auf der Festplatte zu speichern.- Dies ist die gängigste Methode zum Aufnehmen von Fotos.
In-Memory:Verwenden Sie
takePicture(Executor, OnImageCapturedCallback), um einen In-Memory-Puffer des aufgenommenen Bildes zu erhalten.- Das ist nützlich für die Bildverarbeitung oder ‑analyse in Echtzeit.
Executors
Wenn Sie takePicture aufrufen, übergeben Sie ein Executor und entweder eine OnImageCapturedCallback- oder eine OnImageSavedCallback-Funktion. Die Executor führt den Callback aus und verarbeitet alle resultierenden E/A-Vorgänge.
Foto aufnehmen
Um ein Foto aufzunehmen, richten Sie die Kamera ein und rufen dann takePicture auf.
Kamera einrichten
Erstellen Sie eine CameraProvider, um die Kamera einzurichten. Erstellen Sie dann ein ImageCapture-Objekt. ImageCapture.Builder() verwenden:
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);
Foto machen
Nachdem Sie die Kamera konfiguriert haben, rufen Sie takePicture() auf, um ein Bild aufzunehmen.
In diesem Beispiel wird gezeigt, wie Sie mit takePicture() ein Bild auf der Festplatte speichern:
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.
}
}
);
}
Hier sind die wichtigsten Punkte zu diesem Snippet:
- Mit dem
ImageCapture.OutputFileOptionskönnen Sie den Speicherort und die Metadaten konfigurieren.- Hier verwendet
OutputFileOptions.Builder()einFile-Objekt, um den Speicherort zu bestimmen.
- Hier verwendet
- Die Funktion
takePicture()nimmt das Bild asynchron mit den angegebenen Optionen und dem Executor auf. - Das
OnImageSavedCallbackbietet Callbacks für Erfolg und Fehler.- Der
onImageSaved()-Callback verarbeitet erfolgreiche Bildaufnahmen und bietet Zugriff auf die Ergebnisse der gespeicherten Bilder. - Mit dem
onError()-Callback werden Fehler bei der Aufnahme von Bildern behandelt.
- Der
Zusätzliche Optionen
Im Leitfaden zum Konfigurieren für Optimierung, Flash und Dateiformat finden Sie weitere Möglichkeiten zum Konfigurieren von ImageCapture.
Weitere Ressourcen
Weitere Informationen zu CameraX finden Sie in den folgenden Ressourcen:
Codelab
Codebeispiel