Bergabunglah bersama kami di ⁠#Android11: The Beta Launch Show pada tanggal 3 Juni!

Pengambilan gambar

Kasus penggunaan pengambilan gambar didesain untuk mengambil foto berkualitas tinggi dengan resolusi tinggi dan memberikan fungsi auto-white-balance, auto-exposure, dan fokus otomatis (3A), selain kontrol kamera manual 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. Metode 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.

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

Setelah Anda mengonfigurasi kamera, kode berikut akan mengambil foto berdasarkan tindakan pengguna:

Kotlin

    fun onClick() {
        val outputFileOptions = ImageCapture.OutputFileOptions.Builder(File(...))
        imageCapture.takePicture(outputFileOptions,
            object : ImageCapture.OnImageSavedListener {
                override fun onError(error: ImageCapture.ImageCaptureError,
                                     message: String, exc: Throwable?) {
                    // 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,
            new ImageCapture.OnImageSavedListener() {
                @Override
                public void onImageSaved(ImageCapture.OutputFileResults outputFileResults) {
                    // insert your code here.
                }
                @Override
                public void onError(
                        ImageCapture.ImageCaptureError imageCaptureError,
                        String message,
                        Throwable cause) {
                    // insert your code here.
                }
        }
    }
    

Metode pengambilan gambar sepenuhnya mendukung format JPEG.

Referensi lainnya

Untuk mempelajari CameraX lebih lanjut, lihat referensi tambahan berikut.

Codelab

  • Memulai CameraX
  • Contoh kode

  • Contoh aplikasi CameraX resmi