Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

Mengambil 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 berbagai kontrol kamera manual yang sederhana. Pemanggil bertanggung jawab menentukan penggunaan gambar yang diambil, yang meliputi opsi berikut:

  • takePicture(OnImageCapturedListener): Metode ini menyediakan buffer dalam memori untuk gambar yang diambil.
  • takePicture(File, OnImageSavedListener): Metode ini menyimpan gambar yang diambil ke lokasi file yang disediakan.
  • takePicture(File, OnImageSavedListener, Metadata): Metode ini memungkinkan Anda menentukan metadata yang akan disematkan di Exif file tersimpan.

Implementasi

Kontrol-kontrol dasar untuk mengambil foto disediakan. Foto diambil dengan opsi lampu kilat dan menggunakan fokus otomatis terus-menerus.

Untuk mendapatkan latensi pengambilan foto yang optimal, tetapkan ImageCapture.CaptureMode ke MIN_LATENCY. Untuk mendapatkan kualitas yang optimal, tetapkan ke MAX_QUALITY.

Contoh kode berikut menunjukkan cara mengonfigurasi aplikasi Anda untuk mengambil foto:

Kotlin

    val imageCaptureConfig = ImageCaptureConfig.Builder()
        .setTargetRotation(windowManager.defaultDisplay.rotation)
        .build()

    val imageCapture = ImageCapture(imageCaptureConfig)

    CameraX.bindToLifecycle(this as LifecycleOwner,
        imageCapture, imageAnalysis, preview)
    

Java

    ImageCaptureConfig config =
        new ImageCaptureConfig.Builder()
            .setTargetRotation(getWindowManager().getDefaultDisplay().getRotation())
            .build();

    ImagesCapture imageCapture = new ImageCapture(config);

    CameraX.bindToLifecycle((LifecycleOwner) this, imageCapture, imageAnalysis, preview);
    

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

Kotlin

    fun onClick() {
        val file = File(...)
        imageCapture.takePicture(file,
            object : ImageCapture.OnImageSavedListener {
                override fun onError(error: ImageCapture.ImageCaptureError,
                                     message: String, exc: Throwable?) {
                    // insert your code here.
                }
                override fun onImageSaved(file: File) {
                    // insert your code here.
                }
            })
    }
    

Java

    public void onClick() {
        File file = new File(...);

        imageCapture.takePicture(file,
            new ImageCapture.OnImageSavedListener() {
                @Override
                public void onImageSaved(File file) {
                    // 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