Halaman ini menjelaskan cara mengambil gambar berkualitas tinggi dengan CameraX. Anda melakukannya
dengan class ImageCapture
dan metode terkaitnya.
Konsep utama
Berikut adalah konsep utama yang dibahas dalam dokumen ini:
- Metode penyimpanan: Anda dapat mengambil gambar ke buffer dalam memori atau langsung ke file.
- Eksekutor:
ImageCapture
menggunakan eksekutor untuk menangani callback dan operasi I/O. Anda dapat menyesuaikan eksekutor ini untuk performa dan kontrol yang lebih baik. - Mode Pengambilan: Anda dapat mengonfigurasi mode pengambilan untuk mengoptimalkan latensi atau kualitas gambar.
Metode penyimpanan
Ada dua cara untuk mengambil gambar dengan
ImageCapture
. Masing-masing menggunakan overload ImageCapture.takePicture()
:
File: Gunakan
takePicture(OutputFileOptions, Executor, OnImageSavedCallback)
untuk menyimpan gambar yang diambil langsung ke file di disk.- Ini adalah cara paling umum untuk mengambil foto.
Dalam Memori: Gunakan
takePicture(Executor, OnImageCapturedCallback)
untuk menerima buffering dalam memori dari gambar yang diambil.- Hal ini berguna untuk pemrosesan atau analisis gambar real-time.
Eksekutor
Saat memanggil takePicture
, Anda meneruskan Executor
dan fungsi
OnImageCapturedCallback
atau OnImageSavedCallback
. Executor
menjalankan callback dan menangani IO yang dihasilkan.
Mengambil foto
Untuk mengambil foto, Anda menyiapkan kamera, lalu memanggil takePicture
.
Menyiapkan kamera
Untuk menyiapkan kamera, buat CameraProvider
. Kemudian, buat objek ImageCapture
. Gunakan 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);
Ambil foto
Setelah mengonfigurasi kamera, panggil takePicture()
untuk mengambil gambar.
Contoh ini menunjukkan cara menggunakan takePicture()
untuk menyimpan gambar
ke disk:
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.
}
}
);
}
Berikut adalah poin-poin penting tentang cuplikan ini:
ImageCapture.OutputFileOptions
memungkinkan Anda mengonfigurasi lokasi simpan dan metadata.- Di sini,
OutputFileOptions.Builder()
menggunakan objekFile
untuk menentukan lokasi penyimpanan.
- Di sini,
- Fungsi
takePicture()
mengambil gambar secara asinkron menggunakan opsi dan eksekutor yang disediakan. OnImageSavedCallback
menyediakan callback untuk keberhasilan dan kegagalan.- Callback
onImageSaved()
menangani pengambilan gambar yang berhasil dan memberikan akses ke hasil gambar tersimpan. - Callback
onError()
menangani error pengambilan gambar.
- Callback
Opsi tambahan
Lihat Panduan mengonfigurasi untuk pengoptimalan, flash, dan format file untuk mengetahui cara
tambahan yang dapat Anda gunakan untuk mengonfigurasi ImageCapture
.
Aset lainnya
Untuk mempelajari CameraX lebih lanjut, lihat referensi berikut:
Codelab
Contoh kode