ছবি ক্যাপচার করা

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() ব্যবহার করুন:

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

কোডল্যাব

  • CameraX ব্যবহার শুরু করা
  • কোড স্যাম্পেল

  • CameraX স্যাম্পেল অ্যাপ