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:
ImageCaptureuż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():
Plik: użyj
takePicture(OutputFileOptions, Executor, OnImageSavedCallback), aby zapisać przechwycony obraz bezpośrednio w pliku na dysku.- Jest to najczęstszy sposób robienia zdjęć.
W pamięci: użyj
takePicture(Executor, OnImageCapturedCallback), aby otrzymać bufor w pamięci z zarejestrowanym obrazem.- Jest to przydatne w przypadku przetwarzania lub analizowania obrazów w czasie rzeczywistym.
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.OutputFileOptionsumożliwia skonfigurowanie lokalizacji zapisu i metadanych.- W tym przypadku usługa
OutputFileOptions.Builder()używa obiektuFile, aby określić miejsce zapisu.
- W tym przypadku usługa
- Funkcja
takePicture()rejestruje obraz asynchronicznie, korzystając z podanych opcji i wykonawcy. OnImageSavedCallbackudostę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.
- Wywołanie zwrotne
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
Przykładowy kod