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 vùng đệm trong bộ nhớ hoặc trực tiếp vào tệp.
- Trình thực thi:
ImageCapture
sử dụng trình thực thi để xử lý lệnh gọi lại và các thao tác I/O. Bạn có thể tuỳ chỉnh các trình thực thi này để có hiệu suất và khả năng kiểm soát tốt hơn. - 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ó hai cách để chụp ảnh bằng ImageCapture
. Mỗi hàm 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 chụp ảnh phổ biến nhất.
Trong bộ nhớ: Sử dụng
takePicture(Executor, OnImageCapturedCallback)
để nhận vùng đệm trong bộ nhớ của hình ảnh đã chụp.- Điều này rất hữu ích khi 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à một hàm OnImageCapturedCallback
hoặc OnImageSavedCallback
. Executor
chạy lệnh gọi lại và xử lý mọi hoạt động đầu vào/đầu ra (IO) thu được.
Chụp ảnh
Để chụp ảnh, bạn thiết lập máy ảnh rồi gọi takePicture
.
Thiết lập camera
Để thiết lập máy ảnh, hãy tạo một CameraProvider
. Sau đó, hãy tạo một đối tượng ImageCapture
. Sử dụng ImageCapture.Builder()
:
Kotlin
val imageCapture = ImageCapture.Builder()
.setTargetRotation(view.display.rotation)
.build()
cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture, preview)
Java
ImageCapture imageCapture =
new ImageCapture.Builder()
.setTargetRotation(view.getDisplay().getRotation())
.build();
cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture, preview);
Chụp ảnh
Sau khi bạn định cấu hình máy ảnh, 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:
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.
}
}
);
}
Sau đây là các điểm chính về đoạn mã này:
ImageCapture.OutputFileOptions
cho 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 đối tượngFile
để xác định vị trí lưu.
- Ở đây,
- Hàm
takePicture()
chụp ảnh không đồng bộ bằng cách sử dụng các tuỳ chọn và trình thực thi được cung cấp. OnImageSavedCallback
cung cấp lệnh gọi lại cho trường hợp 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á, truyền nhanh 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