Trang này mô tả cách chụp ảnh chất lượng cao bằng CameraX. Bạn thực hiện việc này bằng lớp ImageCapture và các phương thức liên kết của lớp đó.
Khái niệm chính
Sau đây là các khái niệm chính được thảo luận trong tài liệu này:
- Phương thức lưu trữ: Bạn có thể chụp ảnh vào một vùng đệm trong bộ nhớ hoặc trực tiếp vào một tệp.
- Trình thực thi:
ImageCapturesử dụng trình thực thi để xử lý các lệnh gọi lại và thao tác I/O. Bạn có thể tuỳ chỉnh các trình thực thi này để cải thiện hiệu suất và khả năng kiểm soát. - Chế độ chụp: Bạn có thể định cấu hình chế độ chụp để tối ưu hoá độ trễ hoặc chất lượng hình ảnh.
Phương thức lưu trữ
Có 2 cách để chụp ảnh bằng ImageCapture. Mỗi loại đều sử dụng một phương thức nạp chồng của ImageCapture.takePicture():
Tệp: Sử dụng
takePicture(OutputFileOptions, Executor, OnImageSavedCallback)để lưu trực tiếp hình ảnh đã chụp vào một tệp trên ổ đĩa.- Đây là cách phổ biến nhất để chụp ảnh.
Trong bộ nhớ: Sử dụng
takePicture(Executor, OnImageCapturedCallback)để nhận bộ đệm trong bộ nhớ của hình ảnh đã chụp.- Điều này rất hữu ích cho việc xử lý hoặc phân tích hình ảnh theo thời gian thực.
Trình thực thi
Khi gọi takePicture, bạn sẽ truyền một Executor và hàm OnImageCapturedCallback hoặc OnImageSavedCallback. Executor chạy lệnh gọi lại và xử lý mọi IO kết quả.
Chụp ảnh
Để chụp ảnh, bạn thiết lập camera rồi gọi takePicture.
Thiết lập camera
Để thiết lập camera, hãy tạo một CameraProvider. Sau đó, hãy tạo một đối tượng ImageCapture. Dùng ImageCapture.Builder():
val imageCapture = ImageCapture.Builder() .setTargetRotation(view.display.rotation) .build() cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture, preview)
Chụp ảnh
Sau khi bạn định cấu hình camera, hãy gọi takePicture() để chụp ảnh.
Ví dụ này minh hoạ cách sử dụng takePicture() để lưu hình ảnh vào ổ đĩa:
fun onClick() { val outputFileOptions = ImageCapture.OutputFileOptions.Builder(File("photo.jpg")).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 } } ) }
Sau đây là những điểm chính về đoạn mã này:
ImageCapture.OutputFileOptionscho phép bạn định cấu hình vị trí lưu và siêu dữ liệu.- Ở đây,
OutputFileOptions.Builder()sử dụng một đối tượngFileđể xác định vị trí lưu.
- Ở đây,
- Hàm
takePicture()chụp ảnh theo cách không đồng bộ bằng cách sử dụng các lựa chọn và trình thực thi được cung cấp. OnImageSavedCallbackcung cấp các lệnh gọi lại cho trạng thái thành công và không thành công.- Lệnh gọi lại
onImageSaved()xử lý việc chụp ảnh thành công và cung cấp quyền truy cập vào kết quả hình ảnh đã lưu. - Lệnh gọi lại
onError()xử lý các lỗi chụp ảnh.
- Lệnh gọi lại
Tùy chọn bổ sung
Hãy xem Hướng dẫn định cấu hình để tối ưu hoá, flash và định dạng tệp để biết thêm các cách bạn có thể định cấu hình ImageCapture.
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 sau:
Lớp học lập trình
Đoạn mã mẫu