ImageBitmap बनाम Image पक्ष

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

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

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

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

वेक्टर का उदाहरण (फ़ाइल एक्सटेंशन .xml हैं या Kotlin कोड में तय किए गए हैं)
इमेज 2: वेक्टर का उदाहरण (फ़ाइल एक्सटेंशन .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

स्क्रीन पर ImageVector को ड्रॉ करने की ज़िम्मेदारी VectorPainter की होती है. ImageVector, SVG कमांड के सबसेट के साथ काम करता है. सभी इमेज को वैक्टर के तौर पर नहीं दिखाया जा सकता. उदाहरण के लिए, कैमरे से ली गई फ़ोटो को वैक्टर में नहीं बदला जा सकता.

कस्टम ImageVector बनाने के लिए, किसी मौजूदा वेक्टर ड्रॉबल एक्सएमएल फ़ाइल को इंपोर्ट करें. यह फ़ाइल, इंपोर्ट टूल का इस्तेमाल करके 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)