ImageBitmap बनाम Image पक्ष

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

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

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

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

वेक्टर का उदाहरण (फ़ाइल एक्सटेंशन .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 को ज़्यादा कस्टमाइज़ करने की ज़रूरत है, जैसे कि कस्टम पेंटर को लागू करना और आपको 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)