На этой странице рассказывается, как делать качественные фотографии с помощью CameraX. Для этого используется класс ImageCapture и связанные с ним методы.
Основные понятия
Ниже перечислены основные понятия, которые рассматриваются в этом документе.
- Способ хранения. Вы можете сохранять изображения в буфере памяти или непосредственно в файле.
- Исполнители.
ImageCaptureиспользует исполнителей для обработки обратных вызовов и операций ввода-вывода. Вы можете настроить эти исполнители для повышения производительности и контроля. - Режимы съемки. Вы можете настроить режим съемки, чтобы оптимизировать ее для уменьшения задержки или повышения качества изображения.
Способ хранения
С помощью ImageCapture можно делать снимки двумя способами. Каждый из них использует перегрузку ImageCapture.takePicture():
Файл. Используйте
takePicture(OutputFileOptions, Executor, OnImageSavedCallback), чтобы сохранить сделанное изображение непосредственно в файл на диске.- Это самый распространенный способ съемки.
В памяти. Используйте
takePicture(Executor, OnImageCapturedCallback), чтобы получить буфер захваченного изображения в памяти.- Это полезно для обработки или анализа изображений в реальном времени.
Исполнители
При вызове takePicture вы передаете Executor и функцию OnImageCapturedCallback или OnImageSavedCallback. Функция Executor выполняет обратный вызов и обрабатывает все полученные данные ввода-вывода.
Сделать снимок
Чтобы сделать фото, настройте камеру и вызовите функцию takePicture.
Как настроить камеру
Чтобы настроить камеру, создайте объект CameraProvider. Затем создайте объект ImageCapture. Используйте ImageCapture.Builder():
val imageCapture = ImageCapture.Builder() .setTargetRotation(view.display.rotation) .build() cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture, preview)
Сделайте снимок
После настройки камеры вызовите функцию takePicture(), чтобы сделать снимок.
В этом примере показано, как использовать takePicture(), чтобы сохранить изображение на диск:
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 } } ) }
Вот основные сведения об этом фрагменте:
ImageCapture.OutputFileOptionsпозволяет настроить место сохранения и метаданные.- В этом случае объект
Fileиспользуется в свойствеOutputFileOptions.Builder(), чтобы определить место сохранения.
- В этом случае объект
- Функция
takePicture()асинхронно захватывает изображение, используя предоставленные параметры и исполнитель. OnImageSavedCallbackпредоставляет обратные вызовы для успешных и неудачных операций.- Функция обратного вызова
onImageSaved()обрабатывает успешную съемку и предоставляет доступ к результатам сохранения изображения. - Обратный вызов
onError()обрабатывает ошибки при съемке изображений.
- Функция обратного вызова
Дополнительные параметры
Дополнительные способы настройки ImageCapture описаны в руководстве по оптимизации, настройке вспышки и формата файла.
Дополнительные ресурсы
Чтобы узнать больше о CameraX, ознакомьтесь со следующими ресурсами:
Практическая работа
Пример кода