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

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

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

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

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

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

ImageBitmap

Compose-এ, একটি ImageBitmap ইনস্ট্যান্সে একটি রাস্টার ছবি (প্রায়ই Bitmap হিসেবে উল্লেখ করা হয়) লোড করা যায় এবং 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

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

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

সাধারণ ব্যবহারের ক্ষেত্রে, painterResource() ImageVectors-এর জন্য একই ভাবে কাজ করে যেভাবে এটি ImageBitmap ক্লাসের জন্য কাজ করে এবং ফলাফল হিসেবে VectorPainter প্রদান করে। painterResource(), VectorDrawables এবং BitmapDrawables-কে যথাক্রমে VectorPainter এবং BitmapPainter-এ লোড করার কাজটি করে। কোনও ছবিতে 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)