Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Pengambilan gambar

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:

Ada dua jenis executor yang dapat disesuaikan yang menjalankan ImageCapture, executor callback dan executor IO.

  • Executor callback adalah parameter dari metode takePicture. Ini digunakan untuk menjalankan OnImageCapturedCallback yang diberikan pengguna.
  • Jika pemanggil memilih untuk menyimpan gambar ke lokasi file, Anda dapat menentukan executor untuk melakukan IO. Untuk menetapkan executor IO, panggil ImageCapture.Builder.setIoExecutor(Executor). Jika executor tidak ada, CameraX akan ditetapkan secara default ke executor IO internal untuk tugas tersebut.

Penerapan

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);

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.OnImageSavedListener() {
            @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

  • Memulai CameraX
  • Contoh kode

  • Contoh aplikasi CameraX resmi