ImageBitmap बनाम Image पक्ष

इमेज के दो सबसे आम फ़ॉर्मैट, रास्टर और वेक्टर इमेज होते हैं.

रास्टर ग्राफ़िक फ़ॉर्मैट में पिक्सल होते हैं: छोटे-छोटे स्क्वेयर, जिनमें रंग होता है. यह रंग लाल, हरे, नीले, और ऐल्फ़ा वैल्यू से मिलकर बना होता है. कई पिक्सल को एक साथ रखने पर, बहुत ज़्यादा जानकारी वाली इमेज बनाई जा सकती है. जैसे, कोई फ़ोटोग्राफ़. रास्टर ग्राफ़िक का रिज़ॉल्यूशन तय होता है. यानी, इसमें पिक्सल की संख्या तय होती है. इसका मतलब है कि इमेज का साइज़ बढ़ाने पर, उसकी क्वालिटी खराब हो जाती है और पिक्सल फट सकते हैं. रास्टर ग्राफ़िक फ़ॉर्मैट के उदाहरण JPEG, PNG, और WEBP हैं.

JPEG फ़ाइल का उदाहरण
पहली इमेज: JPEG फ़ाइल का उदाहरण

वहीं दूसरी ओर, वेक्टर इमेज को स्क्रीन पर मौजूद किसी विज़ुअल एलिमेंट के गणितीय प्रतिनिधित्व के तौर पर दिखाया जाता है. इन्हें ज़रूरत के हिसाब से बड़ा या छोटा किया जा सकता है. वेक्टर, निर्देशों का एक ऐसा सेट होता है जिससे यह पता चलता है कि स्क्रीन पर इमेज कैसे बनानी है. उदाहरण के लिए, लाइन, पॉइंट या फ़िल. स्क्रीन पर किसी वेक्टर को स्केल करने पर, उसकी क्वालिटी कम नहीं होगी. ऐसा इसलिए, क्योंकि गणित का फ़ॉर्मूला अलग-अलग कमांड के बीच के संबंध को बनाए रखेगा. Material Symbols, ImageVector का एक अच्छा उदाहरण है. ऐसा इसलिए, क्योंकि इन सभी को गणित के फ़ॉर्मूले से तय किया जा सकता है.

वेक्टर का उदाहरण (फ़ाइल एक्सटेंशन .xml होते हैं या Kotlin कोड में तय किए जाते हैं)
दूसरी इमेज: वेक्टर का उदाहरण (फ़ाइल एक्सटेंशन .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 कमांड के सबसेट के साथ काम करता है. सभी इमेज को वेक्टर के तौर पर नहीं दिखाया जा सकता. उदाहरण के लिए, कैमरे से ली गई फ़ोटो को वेक्टर में नहीं बदला जा सकता.

कस्टम ImageVector बनाने के लिए, मौजूदा vector drawable एक्सएमएल फ़ाइल इंपोर्ट करें. इसे import tool का इस्तेमाल करके Android Studio में इंपोर्ट किया जाता है. इसके अलावा, क्लास लागू करके और पाथ कमांड मैन्युअल तरीके से जारी करके भी कस्टम ImageVector बनाया जा सकता है.

आसान इस्तेमाल के मामलों में, painterResource() क्लास के लिए ImageBitmap जिस तरह काम करता है उसी तरह ImageVectors के लिए भी काम करता है. इससे 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)