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