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: ImageCaptureuż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():
- Plik: kliknij - takePicture(OutputFileOptions, Executor, OnImageSavedCallback), aby zapisać zrobione zdjęcie bezpośrednio na dysku.- Jest to najczęstszy sposób robienia zdjęć.
 
- W pamięci: użyj parametru - takePicture(Executor, OnImageCapturedCallback), aby otrzymać bufor w pamięci z przechwyconego obrazu.- Jest to przydatne w przypadku przetwarzania lub analizy obrazu w czasie rzeczywistym.
 
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.OutputFileOptionsmożesz skonfigurować lokalizację zapisu i metadane.- W tym przykładzie funkcja OutputFileOptions.Builder()korzysta z obiektuFile, aby określić lokalizację zapisu.
 
- W tym przykładzie funkcja 
- Funkcja takePicture()rejestruje obraz asynchronicznie, korzystając z podanych opcji i wykonawcy.
- Funkcja OnImageSavedCallbackzapewnia 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ęć.
 
- Wywołanie 
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
Przykładowy kod
