ইমেজ বিটম্যাপ বনাম ইমেজ ভেক্টর

সবচেয়ে সাধারণ দুই ধরনের ছবির ফর্ম্যাট হল রাস্টার ও ভেক্টর ইমেজ।

রাস্টার গ্রাফিক ফর্ম্যাটে পিক্সেল থাকে: ছোট ছোট স্বতন্ত্র বর্গক্ষেত্র যাতে একটি রঙ থাকে (লাল, সবুজ, নীল এবং আলফা মান দিয়ে তৈরি)। অনেকগুলি পিক্সেল একসাথে রাখলে, একটি খুব বিস্তারিত ছবি তৈরি করা যেতে পারে, যেমন একটি ফটোগ্রাফ। রাস্টার গ্রাফিকের রেজোলিউশন নির্দিষ্ট (পিক্সেলের সংখ্যা নির্দিষ্ট)। এর অর্থ হল, আপনি ছবির সাইজ বাড়ালে, এটি ডিটেল হারায় এবং পিক্সেল দেখা যেতে পারে। JPEG, PNG ও WEBP হল রাস্টার গ্রাফিক ফর্ম্যাটের উদাহরণ।

গোল্ডেন রিট্রিভার কুকুরের ক্লোজ-আপ ফটোগ্রাফ।
ছবি ১. JPEG ফাইলের উদাহরণ।

অন্যদিকে, ভেক্টর ইমেজ হল স্ক্রিনে কোনও ভিজ্যুয়াল এলিমেন্টের স্কেলেবল গাণিতিক উপস্থাপনা। ভেক্টর হল কমান্ডের একটি সেট যা স্ক্রিনে কীভাবে ছবি আঁকতে হবে তা বর্ণনা করে—যেমন, একটি লাইন, পয়েন্ট বা ফিল। স্ক্রিনে ভেক্টর স্কেল করার সময় এটির কোয়ালিটি নষ্ট হয় না, কারণ গাণিতিক ফর্মুলা বিভিন্ন কমান্ডের মধ্যে সম্পর্ক বজায় রাখে। ImageVector-এর ভালো উদাহরণ হল Material প্রতীক, কারণ এগুলি সবই গাণিতিক ফর্মুলা দিয়ে সংজ্ঞায়িত করা যায়।

হ্যান্ডেল, বাস্কেট ও দুটি চাকা সহ শপিং কার্টের একটি সাধারণ লাইন-আর্ট আইকন।
ছবি ২. ভেক্টর উদাহরণ (ফাইল এক্সটেনশন হল .xml বা Kotlin কোডে সংজ্ঞায়িত)।

ImageBitmap

Compose-এ, একটি রাস্টার ইমেজ (প্রায়শই Bitmap হিসাবে উল্লেখ করা হয়) একটি ImageBitmap ইনস্ট্যান্সে লোড করা যেতে পারে এবং একটি BitmapPainter স্ক্রিনে বিটম্যাপ আঁকার জন্য দায়ী।

প্রাথমিক ব্যবহারের ক্ষেত্রে, painterResource() ব্যবহার করে ImageBitmap তৈরি করা যেতে পারে এবং এটি Painter অবজেক্ট (এই ক্ষেত্রে - একটি BitmapPainter) রিটার্ন করে:

Image(
    painter = painterResource(id = R.drawable.dog),
    contentDescription = stringResource(id = R.string.dog_content_description)
)

আপনার যদি আরও কাস্টমাইজেশনের প্রয়োজন হয় (যেমন, একটি কাস্টম পেইন্টার বাস্তবায়ন) এবং ImageBitmap-এ অ্যাক্সেসের প্রয়োজন হয়, তাহলে আপনি এটি নিম্নলিখিত উপায়ে লোড করতে পারেন:

val imageBitmap = ImageBitmap.imageResource(R.drawable.dog)

ImageVector

VectorPainter-এর দায়িত্ব হল স্ক্রিনে ImageVector দেখানো। ImageVector-এ স্কেলেবেল ভেক্টর গ্রাফিক্স (SVG) কমান্ডের সাবসেট কাজ করে। সব ছবি ভেক্টর হিসেবে দেখানো যায় না (যেমন, আপনার ক্যামেরা দিয়ে তোলা ফটো ভেক্টরে পরিবর্তন করা যায় না)।

আপনি আগে থেকে থাকা ভেক্টর ড্রয়েবেল XML ফাইল (ইমপোর্ট টুল ব্যবহার করে Android Studio-তে ইমপোর্ট করা) ইমপোর্ট করে অথবা ক্লাস প্রয়োগ করে এবং ম্যানুয়ালি পাথ কমান্ড ইস্যু করে কাস্টম ImageVector তৈরি করতে পারবেন।

সাধারণ ব্যবহারের ক্ষেত্রে, painterResource() ImageVectors-এর জন্য একইভাবে কাজ করে যেভাবে এটি ImageBitmap ক্লাসের জন্য করে, ফলাফল হিসেবে VectorPainter ফেরত দেয়। painterResource() যথাক্রমে VectorPainter এবং BitmapPainter-এ VectorDrawables এবং BitmapDrawables লোড করার বিষয়টি ম্যানেজ করে। কোনও ছবিতে VectorDrawable লোড করতে, এটি ব্যবহার করুন:

Image(
    painter = painterResource(id = R.drawable.baseline_shopping_cart_24),
    contentDescription = stringResource(id = R.string.shopping_cart_content_desc)
)

আপনার যদি আরও কাস্টমাইজেশনের প্রয়োজন হয় এবং ImageVector-এ অ্যাক্সেস করতে হয়, তাহলে আপনি নিম্নলিখিত উপায়ে এটি লোড করতে পারেন:

val imageVector = ImageVector.vectorResource(id = R.drawable.baseline_shopping_cart_24)