Kasus penggunaan pengambilan gambar didesain untuk mengambil foto berkualitas tinggi dan beresolusi tinggi serta menyediakan fungsionalitas white balance otomatis, eksposur otomatis, dan fokus otomatis (3A), selain kontrol kamera manual yang sederhana. Pemanggil bertanggung jawab menentukan penggunaan gambar yang diambil, yang meliputi opsi berikut:
takePicture(Executor, OnImageCapturedCallback)
: Metode ini menyediakan buffering dalam memori dari gambar yang diambil.takePicture(OutputFileOptions, Executor, OnImageSavedCallback)
: Metode ini menyimpan gambar yang diambil ke lokasi file yang disediakan.
Ada dua jenis eksekutor yang dapat disesuaikan yang menjalankan ImageCapture
,
eksekutor callback dan eksekutor IO.
- Eksekutor callback adalah parameter dari metode
takePicture
. Ini digunakan untuk menjalankanOnImageCapturedCallback()
yang diberikan pengguna. - Jika pemanggil memilih untuk menyimpan gambar ke lokasi file, Anda dapat menentukan
eksekutor untuk melakukan IO. Untuk menetapkan eksekutor IO, panggil
ImageCapture.Builder.setIoExecutor(Executor)
. Jika eksekutor tidak ada, CameraX akan ditetapkan secara default ke eksekutor IO internal untuk tugas tersebut.
Implementasi
Kontrol-kontrol dasar untuk mengambil foto disediakan. Foto diambil dengan opsi lampu flash dan menggunakan fokus otomatis terus-menerus.
Untuk mengoptimalkan pengambilan foto untuk latensi, tetapkan
ImageCapture.CaptureMode
ke
CAPTURE_MODE_MINIMIZE_LATENCY
.
Untuk mengoptimalkan kualitas, tetapkan ke
CAPTURE_MODE_MAXIMIZE_QUALITY
.
Contoh kode berikut menunjukkan cara mengonfigurasi aplikasi Anda untuk mengambil 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);
Perhatikan bahwa bindToLifecycle()
menampilkan objek Camera
. Lihat panduan ini untuk informasi mengontrol output kamera selengkapnya, seperti zoom dan eksposur.
Setelah Anda mengonfigurasi kamera, kode berikut akan mengambil foto berdasarkan tindakan pengguna:
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. } } ); }
Metode pengambilan gambar sepenuhnya mendukung format
JPEG
. Untuk mengetahui kode contoh
yang menampilkan cara mengonversi objek Media.Image
dari format YUV_420_888
ke objek
Bitmap
RGB, lihat
YuvToRgbConverter.kt
.
Referensi lainnya
Untuk mempelajari CameraX lebih lanjut, lihat referensi tambahan berikut.
Codelab
Contoh kode