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