Chụp ảnh

Trường hợp sử dụng chụp ảnh được thiết kế để chụp ảnh có độ phân giải cao và chất lượng cao, đồng thời cung cấp chức năng tự động cân bằng trắng, tự động phơi sáng và lấy nét tự động (3A), ngoài các chế độ kiểm soát máy ảnh chụp thủ công đơn giản. Lệnh gọi chịu trách nhiệm quyết định cách sử dụng ảnh đã chụp, bao gồm các tuỳ chọn sau đây:

Có hai loại trình thực thi (executor) có thể tuỳ chỉnh chạy ImageCapture, trình thực thi lệnh gọi lại và trình thực thi IO.

  • Trình thực thi lệnh gọi lại là tham số của phương thức takePicture. Trình thực thi này được dùng để thực thi OnImageCapturedCallback() do người dùng cung cấp.
  • Nếu lệnh gọi chọn lưu hình ảnh vào một vị trí tệp, bạn có thể chỉ định trình thực thi để thực hiện IO. Để đặt trình thực thi IO, hãy gọi ImageCapture.Builder.setIoExecutor(Executor). Nếu không có trình thực thi này, CameraX sẽ mặc định sử dụng trình thực thi IO nội bộ cho nhiệm vụ.

Triển khai

Chế độ kiểm soát cơ bản để chụp ảnh được cung cấp. Ảnh được chụp bằng các tùy chọn đèn flash và sử dụng tính năng tự động lấy nét liên tục.

Để tối ưu hoá quá trình chụp ảnh về độ trễ, đặt ImageCapture.CaptureMode thành CAPTURE_MODE_MINIMIZE_LATENCY. Để tối ưu hoá chất lượng, đặt thành CAPTURE_MODE_MAXIMIZE_QUALITY.

Mã mẫu sau đây cho biết cách định cấu hình ứng dụng của bạn để chụp ảnh:

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

Lưu ý rằng bindToLifecycle() trả về đối tượng Camera. Xem hướng dẫn này để biết thêm thông tin về cách kiểm soát đầu ra của máy ảnh, chẳng hạn như thu phóng và phơi sáng.

Sau khi bạn định cấu hình máy ảnh, mã sau đây sẽ chụp ảnh dựa trên thao tác của người dùng:

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

Phương thức chụp ảnh hoàn toàn hỗ trợ định dạng JPEG. Để biết mã mẫu cho thấy cách chuyển đổi đối tượng Media.Image từ định dạng YUV_420_888 sang đối tượng Bitmap RGB, xem YuvToRgbConverter.kt.

Tài nguyên khác

Để tìm hiểu thêm về CameraX, hãy tham khảo các tài nguyên bổ sung sau đây.

Lớp học lập trình

  • Bắt đầu sử dụng CameraX
  • Mã mẫu

  • Ứng dụng mẫu CameraX