Nesta página, descrevemos como capturar imagens de alta qualidade com o CameraX. Para isso, use a classe ImageCapture e os métodos associados.
Principais conceitos
Estes são os principais conceitos abordados neste documento:
- Método de armazenamento:é possível capturar imagens em um buffer na memória ou diretamente em um arquivo.
- Executores:o
ImageCaptureusa executores para processar retornos de chamada e operações de E/S. É possível personalizar esses executores para melhorar o desempenho e o controle. - Modos de captura:é possível configurar o modo de captura para otimizar a latência ou a qualidade da imagem.
Método de armazenamento
Há duas maneiras de capturar imagens com
ImageCapture. Cada um usa uma sobrecarga de ImageCapture.takePicture():
Arquivo:use
takePicture(OutputFileOptions, Executor, OnImageSavedCallback)para salvar a imagem capturada diretamente em um arquivo no disco.- Essa é a maneira mais comum de tirar fotos.
Na memória:use
takePicture(Executor, OnImageCapturedCallback)para receber um buffer na memória da imagem capturada.- Isso é útil para análise ou processamento de imagens em tempo real.
Executores
Ao chamar takePicture, você transmite um Executor e uma função OnImageCapturedCallback ou OnImageSavedCallback. O Executor
executa o callback e processa qualquer E/S resultante.
Tirar foto
Para tirar uma foto, configure a câmera e chame takePicture.
Configurar a câmera
Para configurar a câmera, crie um CameraProvider. Em seguida, crie um objeto ImageCapture. Use ImageCapture.Builder():
val imageCapture = ImageCapture.Builder() .setTargetRotation(view.display.rotation) .build() cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture, preview)
Tirar uma foto
Depois de configurar a câmera, chame takePicture() para capturar uma imagem.
Este exemplo demonstra como usar takePicture() para salvar uma imagem
no disco:
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 } } ) }
Confira os pontos principais sobre esse snippet:
- O
ImageCapture.OutputFileOptionspermite configurar o local de salvamento e os metadados.- Aqui, o
OutputFileOptions.Builder()usa um objetoFilepara determinar o local de salvamento.
- Aqui, o
- A função
takePicture()captura a imagem de forma assíncrona usando as opções e o executor fornecidos. - O
OnImageSavedCallbackfornece callbacks para sucesso e falha.- O callback
onImageSaved()processa a captura de imagem bem-sucedida e fornece acesso aos resultados de imagens salvas. - O callback
onError()processa erros de captura de imagem.
- O callback
Mais opções
Consulte o guia de configuração para otimização, flash e formato de arquivo para outras
maneiras de configurar o ImageCapture.
Outros recursos
Para saber mais sobre o CameraX, consulte os seguintes recursos:
Codelab
Exemplo de código