इमेज कैप्चर करना

इस पेज पर, 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 को कॉन्फ़िगर करने के अन्य तरीकों के बारे में जानें.

अतिरिक्त संसाधन

CameraX के बारे में ज़्यादा जानने के लिए, ये संसाधन देखें:

कोडलैब (कोड बनाना सीखना)

  • CameraX का इस्तेमाल शुरू करना
  • कोड सैंपल

  • CameraX के सैंपल ऐप्लिकेशन