หน้านี้จะอธิบายวิธีจับภาพคุณภาพสูงด้วย CameraX โดยคุณดำเนินการดังกล่าวได้โดยใช้คลาส ImageCapture และเมธอดที่เกี่ยวข้อง
หัวข้อสำคัญ
แนวคิดหลักที่กล่าวถึงในเอกสารนี้ ได้แก่
- วิธีการจัดเก็บ: คุณสามารถจับภาพไปยังบัฟเฟอร์ในหน่วยความจำหรือไปยังไฟล์โดยตรง
- Executor: ImageCaptureใช้ Executor เพื่อจัดการการเรียกกลับและการดำเนินการ I/O คุณสามารถปรับแต่งผู้ดำเนินการเหล่านี้เพื่อประสิทธิภาพและการควบคุมที่ดียิ่งขึ้น
- โหมดการจับภาพ: คุณกำหนดค่าโหมดการจับภาพเพื่อเพิ่มประสิทธิภาพสำหรับเวลาในการตอบสนองหรือคุณภาพของรูปภาพได้
วิธีการจัดเก็บข้อมูล
การจับภาพด้วย 
ImageCapture ทำได้ 2 วิธี แต่ละรายการใช้ ImageCapture.takePicture() ดังนี้
- ไฟล์: ใช้ - takePicture(OutputFileOptions, Executor, OnImageSavedCallback)เพื่อบันทึกรูปภาพที่จับภาพไปยังไฟล์ในดิสก์โดยตรง- วิธีนี้เป็นวิธีที่พบบ่อยที่สุดในการจับภาพ
 
- ในหน่วยความจำ: ใช้ - takePicture(Executor, OnImageCapturedCallback)เพื่อรับบัฟเฟอร์ในหน่วยความจำของรูปภาพที่จับภาพไว้- ซึ่งมีประโยชน์สำหรับการประมวลผลหรือการวิเคราะห์รูปภาพแบบเรียลไทม์
 
ผู้ดำเนินการ
เมื่อเรียกใช้ takePicture คุณจะส่ง Executor และฟังก์ชัน OnImageCapturedCallback หรือ OnImageSavedCallback Executor
จะเรียกใช้การเรียกกลับและจัดการ IO ที่เกิดขึ้น
ถ่ายภาพ
หากต้องการถ่ายภาพ ให้ตั้งค่ากล้องแล้วเรียกใช้ takePicture
ตั้งค่ากล้อง
หากต้องการตั้งค่ากล้อง ให้สร้าง CameraProvider จากนั้นสร้างออบเจ็กต์ ImageCapture วิธีใช้ 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);
ถ่ายรูป
หลังจากกำหนดค่ากล้องแล้ว ให้เรียกใช้ takePicture() เพื่อจับภาพ
ตัวอย่างนี้แสดงวิธีใช้ takePicture() เพื่อบันทึกรูปภาพลงในดิสก์
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.
            }
       }
    );
}
ประเด็นสําคัญเกี่ยวกับข้อมูลโค้ดนี้มีดังนี้
- ImageCapture.OutputFileOptionsช่วยให้คุณกําหนดค่าตําแหน่งบันทึกและข้อมูลเมตาได้- ในที่นี้ OutputFileOptions.Builder()ใช้ออบเจ็กต์Fileเพื่อระบุตำแหน่งบันทึก
 
- ในที่นี้ 
- ฟังก์ชัน takePicture()จะจับภาพแบบไม่พร้อมกันโดยใช้ตัวเลือกและผู้ดำเนินการที่ระบุ
- OnImageSavedCallbackจะให้การเรียกกลับสำหรับกรณีที่สำเร็จและไม่สำเร็จ- Callback onImageSaved()จะจัดการการจับภาพรูปภาพให้เสร็จสมบูรณ์และให้การเข้าถึงผลการค้นหารูปภาพที่บันทึกไว้
- การเรียกกลับ onError()จะจัดการข้อผิดพลาดในการจับภาพ
 
- Callback 
ตัวเลือกเพิ่มเติม
ดูคำแนะนำในการกำหนดค่าเพื่อการเพิ่มประสิทธิภาพ แฟลช และรูปแบบไฟล์เพื่อดูวิธีอื่นๆ ในการกําหนดค่า ImageCapture
แหล่งข้อมูลเพิ่มเติม
ดูข้อมูลเพิ่มเติมเกี่ยวกับ CameraX ได้ที่แหล่งข้อมูลต่อไปนี้
Codelab
ตัวอย่างโค้ด
