इस पेज पर, CameraX की मदद से अच्छी क्वालिटी की इमेज कैप्चर करने का तरीका बताया गया है. इसके लिए, ImageCapture क्लास और उससे जुड़े तरीकों का इस्तेमाल किया जाता है.
मुख्य सिद्धांत
इस दस्तावेज़ में इन मुख्य कॉन्सेप्ट के बारे में बताया गया है:
- स्टोरेज का तरीका: इमेज को मेमोरी में मौजूद बफ़र में या सीधे किसी फ़ाइल में कैप्चर किया जा सकता है.
- एक्ज़ीक्यूटर:
ImageCapture, कॉलबैक और I/O कार्रवाइयों को मैनेज करने के लिए एक्ज़ीक्यूटर का इस्तेमाल करता है. बेहतर परफ़ॉर्मेंस और कंट्रोल के लिए, इन एक्ज़ीक्यूटर को पसंद के मुताबिक बनाया जा सकता है. - कैप्चर मोड: कैप्चर मोड को कॉन्फ़िगर किया जा सकता है, ताकि लेटेन्सी या इमेज क्वालिटी को ऑप्टिमाइज़ किया जा सके.
स्टोर करने का तरीका
ImageCapture की मदद से इमेज कैप्चर करने के दो तरीके हैं. इनमें से हर एक में ImageCapture.takePicture() का ज़्यादा इस्तेमाल किया गया है:
फ़ाइल: कैप्चर की गई इमेज को सीधे डिस्क पर मौजूद किसी फ़ाइल में सेव करने के लिए,
takePicture(OutputFileOptions, Executor, OnImageSavedCallback)का इस्तेमाल करें.- फ़ोटो कैप्चर करने का यह सबसे सामान्य तरीका है.
इन-मेमोरी: कैप्चर की गई इमेज का इन-मेमोरी बफ़र पाने के लिए,
takePicture(Executor, OnImageCapturedCallback)का इस्तेमाल करें.- यह रीयल-टाइम में इमेज को प्रोसेस करने या उसका विश्लेषण करने के लिए फ़ायदेमंद है.
एक्ज़ीक्यूटर
takePicture को कॉल करने पर, आपको Executor और OnImageCapturedCallback या OnImageSavedCallback फ़ंक्शन में से किसी एक को पास करना होता है. Executor, कॉलबैक को चलाता है और उससे जुड़े किसी भी आईओ को मैनेज करता है.
फ़ोटो लें
फ़ोटो लेने के लिए, कैमरा सेट अप करें. इसके बाद, 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()कॉलबैक, इमेज को कैप्चर करने की प्रोसेस पूरी होने पर काम करता है. साथ ही, सेव की गई इमेज के नतीजों को ऐक्सेस करने की सुविधा देता है.onError()कॉलबैक, इमेज कैप्चर करने से जुड़ी गड़बड़ियों को ठीक करता है.
अतिरिक्त विकल्प
ImageCapture को कॉन्फ़िगर करने के अन्य तरीकों के बारे में जानने के लिए, ऑप्टिमाइज़ेशन, फ़्लैश, और फ़ाइल फ़ॉर्मैट के लिए कॉन्फ़िगर करने से जुड़ी गाइड देखें.
अतिरिक्त संसाधन
CameraX के बारे में ज़्यादा जानने के लिए, यहां दिए गए संसाधन देखें:
कोडलैब (कोड बनाना सीखना)
कोड सैंपल