इमेज बिटमैप बनाम इमेज वेक्टर

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

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

गोल्डन रिट्रीवर नस्ल के कुत्ते की क्लोज़-अप फ़ोटो.
पहली इमेज. JPEG फ़ाइल का उदाहरण.

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

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

कस्टम ImageVector बनाने के लिए, मौजूदा vector drawable एक्सएमएल फ़ाइल इंपोर्ट करें. इसे import tool का इस्तेमाल करके 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)