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