Zrobienie zdjęcia

Na tej stronie opisano, jak robić zdjęcia wysokiej jakości za pomocą aplikacji CameraX. Robisz to za pomocą klasy ImageCapture i powiązanych z nią metod.

Kluczowych pojęć

W tym dokumencie omówiono następujące podstawowe zagadnienia:

  • Metoda przechowywania: obrazy możesz rejestrować w buforze w pamięci 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 wykonawce, aby zwiększyć wydajność i kontrolę.
  • Tryby rejestrowania: możesz skonfigurować tryb rejestrowania, aby zoptymalizować opóźnienie lub jakość obrazu.

Metoda przechowywania

Zdjęcia można robić na 2 sposoby:ImageCapture Każda z nich korzysta z przeciążenia ImageCapture.takePicture():

Wykonawcy

Gdy wywołujesz funkcję takePicture, przekazujesz argument Executor oraz funkcję OnImageCapturedCallback lub OnImageSavedCallback. Funkcja Executoruruchamia wywołanie zwrotne i obsługuje wszystkie wywołania wejścia/wyjścia.

Zrób zdjęcie

Aby zrobić zdjęcie, ustaw aparat, a potem zadzwoń pod numer takePicture.

Konfigurowanie kamery

Aby skonfigurować kamerę, utwórz CameraProvider. Następnie utwórz obiekt ImageCapture. Użyj formatu 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 takePicture(), aby zrobić zdjęcie. Ten przykład pokazuje, jak za pomocą polecenia 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:

  • Na karcie ImageCapture.OutputFileOptions możesz skonfigurować lokalizację zapisu i metadane.
    • W tym przykładzie funkcja OutputFileOptions.Builder() korzysta z obiektu File, aby określić lokalizację zapisu.
  • Funkcja takePicture() rejestruje obraz asynchronicznie, korzystając z podanych opcji i wykonawcy.
  • Funkcja OnImageSavedCallback zapewnia wywołania zwrotne w przypadku powodzenia i błędu.
    • Wywołanie onImageSaved() obsługuje pomyślne przechwycenie obrazu i zapewnia dostęp do wyników zapisanego obrazu.
    • onError() obsługuje błędy podczas robienia zdjęć.

Dodatkowe opcje

Więcej informacji o dodatkowych sposobach konfigurowania ImageCapture znajdziesz w przewodniku Konfigurowanie 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