ตั้งแต่ CameraX 1.2 เป็นต้นไป โหมดจับภาพแบบไม่มีเวลาหน่วงของชัตเตอร์จะพร้อมใช้งาน เปิดใช้การลดเวลาในการตอบสนองของชัตเตอร์เป็น 0 เพื่อลดเวลาในการตอบสนองได้อย่างมากเมื่อเทียบกับโหมดการจับภาพเริ่มต้น คุณจึงไม่ต้องพลาดช็อตเด็ด
เปิดใช้การเลื่อนชัตเตอร์แบบไม่มีเวลาหน่วง
หากต้องการเปิดใช้การเลื่อนชัตเตอร์แบบไม่มีเวลาหน่วง ให้ส่ง CAPTURE_MODE_ZERO_SHOT_LAG
ไปยัง ImageCapture.Builder.setCaptureMode()
หากไม่สำเร็จ setCaptureMode()
จะกลับไปเป็น CAPTURE_MODE_MINIMIZE_LATENCY
ดูข้อมูลเพิ่มเติมเกี่ยวกับโหมดการจับภาพได้ที่คู่มือการจับภาพ
วิธีการทำงาน
การลดเวลาในการตอบสนองของชัตเตอร์เป็น 0 ใช้บัฟเฟอร์แบบวงแหวนที่จัดเก็บเฟรมที่จับภาพล่าสุด 3 เฟรม เมื่อผู้ใช้กดปุ่มจับภาพ CameraX จะเรียกใช้ takePicture()
และบัฟเฟอร์แบบวงแหวนจะดึงข้อมูลเฟรมที่จับภาพไว้พร้อมการประทับเวลาที่ใกล้เคียงที่สุดกับการกดปุ่ม จากนั้น CameraX จะประมวลผลซ้ำเซสชันการจับภาพเพื่อสร้างรูปภาพจากเฟรมนั้น ซึ่งจะบันทึกลงในดิสก์ในรูปแบบ JPEG
สิ่งที่ต้องมีก่อน
ก่อนเปิดใช้การเลื่อนชัตเตอร์แบบไม่มีเวลาหน่วง ให้ใช้ isZslSupported()
เพื่อดูว่าอุปกรณ์มีคุณสมบัติตรงตามข้อกำหนดต่อไปนี้หรือไม่
- กำหนดเป้าหมายเป็น Android 6.0 ขึ้นไป (API ระดับ 23 ขึ้นไป)
- รองรับการประมวลผล
PRIVATE
อีกครั้ง
สำหรับอุปกรณ์ที่ไม่เป็นไปตามข้อกำหนดขั้นต่ำ CameraX จะเปลี่ยนไปใช้ CAPTURE_MODE_MINIMIZE_LATENCY
การลดเวลาในการตอบสนองของชัตเตอร์จะใช้ได้กับการจับภาพเท่านั้น คุณจะเปิดใช้ฟีเจอร์นี้สำหรับการจับภาพวิดีโอหรือส่วนขยายกล้องไม่ได้
สุดท้าย เนื่องจากการใช้แฟลชจะทำให้เกิดเวลาในการตอบสนองที่นานขึ้น ฟีเจอร์การลดเวลาในการตอบสนองของชัตเตอร์เป็น 0 จึงจะไม่ทำงานเมื่อแฟลชเปิดอยู่หรืออยู่ในโหมดอัตโนมัติ ดูข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่าโหมดแฟลชได้ที่ setFlashMode()