จับภาพ

หน้านี้อธิบายวิธีถ่ายภาพคุณภาพสูงด้วย 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 มีการเรียกกลับสำหรับความสำเร็จและความล้มเหลว

ตัวเลือกเพิ่มเติม

ดูวิธีเพิ่มเติมในการกำหนดค่า ImageCapture ได้ที่คู่มือการกำหนดค่าเพื่อการเพิ่มประสิทธิภาพ แฟลช และรูปแบบไฟล์

แหล่งข้อมูลเพิ่มเติม

ดูข้อมูลเพิ่มเติมเกี่ยวกับ CameraX ได้ที่แหล่งข้อมูลต่อไปนี้

Codelab

  • เริ่มต้นใช้งาน CameraX
  • ตัวอย่างโค้ด

  • ตัวอย่างแอป CameraX