চিত্র বিটম্যাপ বনাম চিত্র ভেক্টর

সবচেয়ে প্রচলিত দুই ধরনের ইমেজ ফরম্যাট হলো রাস্টার এবং ভেক্টর ইমেজ।

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

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

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

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

ImageBitmap

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

সাধারণ ব্যবহারের ক্ষেত্রে, একটি ImageBitmap তৈরি করতে painterResource() ব্যবহার করা যায় এবং এটি একটি 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 Scalable Vector Graphics (SVG) কমান্ডের একটি উপসেট সমর্থন করে। সব ছবিকে ভেক্টর হিসেবে উপস্থাপন করা যায় না (উদাহরণস্বরূপ, আপনার ক্যামেরা দিয়ে তোলা ছবিকে ভেক্টরে রূপান্তর করা যায় না)।

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

সাধারণ ব্যবহারের ক্ষেত্রে, painterResource() ImageVectors জন্য ঠিক সেভাবেই কাজ করে যেভাবে এটি ImageBitmap ক্লাসের জন্য করে থাকে এবং ফলাফল হিসেবে একটি VectorPainter রিটার্ন করে। painterResource() যথাক্রমে VectorPainter এবং BitmapPainterVectorDrawables এবং 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)

{% হুবহু %} {% endverbatim %} {% হুবহু %} {% endverbatim %}