Как сделать снимок экрана

На этой странице рассказывается, как делать качественные фотографии с помощью 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, ознакомьтесь со следующими ресурсами:

Практическая работа

  • Начало работы с CameraX
  • Пример кода

  • Примеры приложений CameraX