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