Zrobienie zdjęcia

Na tej stronie dowiesz się, jak robić zdjęcia wysokiej jakości za pomocą CameraX. Możesz to zrobić za pomocą klasy ImageCapture i powiązanych z nią metod.

Kluczowych pojęć

W tym dokumencie omówiono te główne pojęcia:

  • Metoda przechowywania: obrazy możesz zapisywać w buforze w pamięci lub bezpośrednio w pliku.
  • Wykonawcy: ImageCapture używają wykonawców do obsługi wywołań zwrotnych i operacji wejścia/wyjścia. Możesz dostosować te wykonania, aby zwiększyć wydajność i mieć większą kontrolę.
  • Tryby rejestrowania: możesz skonfigurować tryb rejestrowania, aby zoptymalizować go pod kątem opóźnienia lub jakości obrazu.

Metoda przechowywania

Obrazy można rejestrować za pomocą ImageCapture na 2 sposoby. Każda z nich używa przeciążenia ImageCapture.takePicture():

Wykonawcy

Gdy wywołujesz funkcję takePicture, przekazujesz Executor oraz funkcję OnImageCapturedCallback lub OnImageSavedCallback. Funkcja Executor wykonuje wywołanie zwrotne i obsługuje wynikowe operacje wejścia/wyjścia.

Zrób zdjęcie

Aby zrobić zdjęcie, skonfiguruj aparat, a następnie wywołaj takePicture.

Konfigurowanie kamery

Aby skonfigurować kamerę, utwórz CameraProvider. Następnie utwórz obiekt ImageCapture. Użyj 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);

Zrób zdjęcie

Po skonfigurowaniu aparatu wywołaj funkcję takePicture(), aby zrobić zdjęcie. Ten przykład pokazuje, jak za pomocą funkcji takePicture() zapisać obraz na dysku:

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.
            }
       }
    );
}

Oto najważniejsze informacje o tym fragmencie kodu:

  • ImageCapture.OutputFileOptions umożliwia skonfigurowanie lokalizacji zapisu i metadanych.
    • W tym przypadku OutputFileOptions.Builder() używa obiektu File, aby określić miejsce zapisu.
  • Funkcja takePicture() rejestruje obraz asynchronicznie, korzystając z podanych opcji i wykonawcy.
  • Funkcja OnImageSavedCallback udostępnia wywołania zwrotne w przypadku powodzenia i niepowodzenia.
    • Wywołanie zwrotne onImageSaved() obsługuje udane przechwytywanie obrazu i zapewnia dostęp do wyników zapisywania obrazu.
    • Wywołanie zwrotne onError() obsługuje błędy robienia zdjęć.

Dodatkowe opcje

Więcej informacji o konfigurowaniu ImageCapture znajdziesz w przewodniku po konfigurowaniu optymalizacji, flasha i formatu pliku.

Dodatkowe zasoby

Więcej informacji o CameraX znajdziesz w tych materiałach:

Ćwiczenia z programowania

  • Pierwsze kroki z CameraX
  • Przykładowy kod

  • Przykładowe aplikacje CameraX