একটি ইমেজ ক্যাপচার

এই পৃষ্ঠায় বর্ণনা করা হয়েছে কীভাবে CameraX দিয়ে উচ্চ-মানের ছবি তোলা যায়। এটি করার জন্য ImageCapture ক্লাস এবং এর সাথে সম্পর্কিত মেথডগুলো ব্যবহার করতে হয়।

মূল ধারণা

এই নথিতে নিম্নলিখিত প্রধান ধারণাগুলো আলোচনা করা হয়েছে:

  • সংরক্ষণ পদ্ধতি : আপনি ছবিগুলো ইন-মেমরি বাফারে অথবা সরাসরি ফাইলে ধারণ করতে পারেন।
  • এক্সিকিউটর : ImageCapture কলব্যাক এবং আই/ও অপারেশন পরিচালনার জন্য এক্সিকিউটর ব্যবহার করে। উন্নততর পারফরম্যান্স ও নিয়ন্ত্রণের জন্য আপনি এই এক্সিকিউটরগুলোকে কাস্টমাইজ করতে পারেন।
  • ক্যাপচার মোড : আপনি ল্যাটেন্সি অথবা ছবির গুণমান অপ্টিমাইজ করার জন্য ক্যাপচার মোড কনফিগার করতে পারেন।

সংরক্ষণ পদ্ধতি

ImageCapture দিয়ে ছবি তোলার দুটি উপায় আছে। প্রতিটি পদ্ধতিতেই ImageCapture.takePicture() এর একটি ওভারলোড ব্যবহৃত হয়:

  • ফাইল: তোলা ছবিটি সরাসরি ডিস্কের কোনো ফাইলে সংরক্ষণ করতে takePicture(OutputFileOptions, Executor, OnImageSavedCallback) ব্যবহার করুন।

    • ছবি তোলার এটিই সবচেয়ে প্রচলিত উপায়।
  • ইন-মেমরি: ক্যাপচার করা ছবির একটি ইন-মেমরি বাফার গ্রহণ করতে takePicture(Executor, OnImageCapturedCallback) ব্যবহার করুন।

    • এটি রিয়েল-টাইম ইমেজ প্রসেসিং বা বিশ্লেষণের জন্য উপযোগী।

নির্বাহীরা

যখন আপনি takePicture কল করেন, তখন আপনি একটি Executor এবং একটি OnImageCapturedCallback অথবা OnImageSavedCallback ফাংশন পাস করেন। Executor টি কলব্যাকটি চালায় এবং এর ফলে সৃষ্ট যেকোনো IO পরিচালনা করে।

ছবি তুলুন

ছবি তোলার জন্য, আপনাকে ক্যামেরা সেট আপ করতে হবে এবং তারপর takePicture কমান্ডটি চালাতে হবে।

ক্যামেরা সেট আপ করুন

ক্যামেরা সেট আপ করার জন্য, একটি CameraProvider তৈরি করুন। তারপর, একটি ImageCapture অবজেক্ট তৈরি করুন। ImageCapture.Builder() ব্যবহার করুন:

কোটলিন

val imageCapture = ImageCapture.Builder()
    .setTargetRotation(view.display.rotation)
    .build()

cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture, preview)

জাভা

ImageCapture imageCapture =
    new ImageCapture.Builder()
        .setTargetRotation(view.getDisplay().getRotation())
        .build();

cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture, preview);

একটি ছবি তুলুন

ক্যামেরা কনফিগার করার পর, একটি ছবি তোলার জন্য takePicture() কল করুন। এই উদাহরণটি দেখাচ্ছে কিভাবে takePicture() ব্যবহার করে ডিস্কে একটি ছবি সংরক্ষণ করা যায়:

কোটলিন

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.
            }
        })
}

জাভা

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 সম্পর্কে আরও জানতে, নিম্নলিখিত উৎসগুলো দেখুন:

কোডল্যাব

  • CameraX দিয়ে শুরু করা
  • কোডের নমুনা

  • ক্যামেরাএক্স নমুনা অ্যাপস