Bild aufnehmen

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:ImageCapture verwendet 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:

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.OutputFileOptions können Sie den Speicherort und die Metadaten konfigurieren.
    • Hier verwendet OutputFileOptions.Builder() ein File-Objekt, um den Speicherort zu bestimmen.
  • Die Funktion takePicture() nimmt das Bild asynchron mit den angegebenen Optionen und dem Executor auf.
  • Das OnImageSavedCallback bietet 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.

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

  • Erste Schritte mit CameraX
  • Codebeispiel

  • CameraX-Beispiel-Apps