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 omawiamy te główne pojęcia:

  • Metoda przechowywania: obrazy możesz zapisywać w pamięci podręcznej lub bezpośrednio w pliku.
  • Wykonawcy: ImageCapture używa 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 potem wywołaj funkcję takePicture.

Konfigurowanie kamery

Aby skonfigurować kamerę, utwórz CameraProvider. Następnie utwórz obiekt ImageCapture. Użyj ImageCapture.Builder():

val imageCapture = ImageCapture.Builder()
    .setTargetRotation(view.display.rotation)
    .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:

fun onClick() {
    val outputFileOptions = ImageCapture.OutputFileOptions.Builder(File("photo.jpg")).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
            }
        }
    )
}

Oto najważniejsze informacje o tym fragmencie kodu:

  • Ikona ImageCapture.OutputFileOptions umożliwia skonfigurowanie lokalizacji zapisu i metadanych.
    • W tym przypadku usługa OutputFileOptions.Builder() używa obiektu File, aby określić miejsce zapisu.
  • Funkcja takePicture() rejestruje obraz asynchronicznie, korzystając z podanych opcji i wykonawcy.
  • 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 zapisanych obrazów.
    • Wywołanie zwrotne onError() obsługuje błędy przechwytywania obrazu.

Dodatkowe opcje

Więcej sposobów konfigurowania ImageCapture znajdziesz w przewodniku po konfigurowaniu optymalizacji, formatu Flash 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