O caso de uso de captura de imagem foi projetado para a captura de fotos de alta resolução e qualidade e oferece recursos de equilíbrio de branco, exposição e foco automáticos (3A), além de controles de câmera manuais simples. O autor da chamada é responsável por decidir como usar a imagem capturada, incluindo as opções a seguir:
takePicture(Executor, OnImageCapturedCallback)
: este método fornece um buffer na memória da imagem capturada.takePicture(OutputFileOptions, Executor, OnImageSavedCallback)
: este método salva a imagem capturada no local do arquivo fornecido.
Há dois tipos de executores personalizáveis em que ImageCapture
é executado,
o de callback e o de pedido de veiculação.
- O executor de callback é o parâmetro dos métodos
takePicture
. Ele é usado para executar oOnImageCapturedCallback
fornecido pelo usuário. - Se o autor da chamada escolher salvar a imagem em um local de arquivo, você poderá especificar
um executor para fazer o pedido de veiculação. Para definir o executor de pedido de veiculação, chame
ImageCapture.Builder.setIoExecutor(Executor)
. Se o executor estiver ausente, o CameraX adotará como padrão um executor interno de pedido de veiculação para a tarefa.
Implementação
São fornecidos controles básicos para a captura de imagens. As imagens são capturadas com opções de flash e foco automático contínuo.
Para otimizar a captura de fotos para latência, defina
ImageCapture.CaptureMode
como
CAPTURE_MODE_MINIMIZE_LATENCY
.
Para otimizar a qualidade, defina como CAPTURE_MODE_MAXIMIZE_QUALITY
.
Veja na amostra de código a seguir como configurar seu app para tirar uma foto:
Kotlin
val imageCapture = ImageCapture.Builder() .setTargetRotation(view.display.rotation) .build() cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture, imageAnalysis, preview)
Java
ImageCapture imageCapture = new ImageCapture.Builder() .setTargetRotation(view.getDisplay().getRotation()) .build(); cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture, imageAnalysis, preview);
Depois de configurar a câmera, o código a seguir tira uma foto quando o usuário solicita:
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.OnImageSavedListener() { @Override public void onImageSaved(ImageCapture.OutputFileResults outputFileResults) { // insert your code here. } @Override public void onError(ImageCaptureException error) { // insert your code here. } } }
O método de captura de imagem é totalmente compatível com o
formato JPEG
. Para ver o código de amostra e saber como converter um objeto Media.Image
de YUV_420_888
para um objeto no formato RGB Bitmap
, consulte YuvToRgbConverter.kt
.
Outros recursos
Para saber mais sobre o CameraX, consulte os seguintes recursos.
Codelab
Amostra de código