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.

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:

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 ein File-Objekt, um den Speicherort zu bestimmen.
  • 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.

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

  • Erste Schritte mit CameraX
  • Codebeispiel

  • Beispiel-Apps für CameraX