Esta página descreve como capturar imagens de alta qualidade com o CameraX. Faça isso
com a classe ImageCapture
e os métodos associados.
Principais conceitos
Confira a seguir os principais conceitos discutidos neste documento:
- Método de armazenamento:é possível capturar imagens em um buffer na memória ou diretamente em um arquivo.
- Executores:
ImageCapture
usa executores para processar callbacks 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 deles 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 processamento ou análise 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()
:
Kotlin
val imageCapture = ImageCapture.Builder()
.setTargetRotation(view.display.rotation)
.build()
cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture, preview)
Java
ImageCapture imageCapture =
new ImageCapture.Builder()
.setTargetRotation(view.getDisplay().getRotation())
.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:
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.OnImageSavedCallback() {
@Override
public void onImageSaved(ImageCapture.OutputFileResults outputFileResults) {
// insert your code here.
}
@Override
public void onError(ImageCaptureException error) {
// insert your code here.
}
}
);
}
Confira os pontos principais sobre esse snippet:
- O
ImageCapture.OutputFileOptions
permite configurar o local de salvamento e os metadados.- Aqui, o
OutputFileOptions.Builder()
usa um objetoFile
para 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
OnImageSavedCallback
fornece callbacks para sucesso e falha.- O callback
onImageSaved()
processa a captura de imagem bem-sucedida e oferece acesso aos resultados da imagem salva. - 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 conferir outras
maneiras de configurar ImageCapture
.
Outros recursos
Para saber mais sobre o CameraX, consulte os seguintes recursos:
Codelab
Exemplo de código