مقارنة بين ImageBitmap وImageVector

النوعان الأكثر شيوعًا من تنسيقات الصور هما الصور النقطية والمتجهة.

يحتوي تنسيق الرسم الممسوح ضوئيًا على وحدات بكسل: وهي مربّعات فردية صغيرة تحتوي على لون (مكوّن من قيم الأحمر والأخضر والأزرق ودرجة الشفافية). عند وضع الكثير من وحدات البكسل معًا، يمكن إنشاء صورة مفصّلة للغاية، مثل صورة فوتوغرافية. يتميز الرسم المخطّط بدرجة دقة ثابتة (عدد ثابت من وحدات البكسل). وهذا يعني أنّه عند زيادة حجم الصورة، تفقد التفاصيل وقد تظهر بها بكسلات. ومن الأمثلة على تنسيقات الرسومات المخصّصة للطباعة تنسيقات JPEG وPNG وWEBP.

مثال على ملف JPEG
الشكل 1: مثال على ملف JPEG

من ناحية أخرى، الصور المتجهة هي تمثيلات رياضية قابلة للتوسيع لأحد العناصر المرئية على الشاشة. المتّجه هو مجموعة من الأوامر التي تصف كيفية رسم الصورة على الشاشة، مثل خط أو نقطة أو تعبئة. عند تكبير متجه على الشاشة، لن تنخفض جودته لأنّ الصيغة الحسابية ستحافظ على العلاقة بين الأوامر المختلفة. من الأمثلة الجيدة على ImageVector رموز Material، إذ يمكن تحديدها جميعًا باستخدام صيغ رياضية.

مثال على المتجه (امتدادات الملفات هي xml .أو محدّدة في رمز Kotlin)
الشكل 2: مثال على ملف رسومات متحركة (إضافات الملفات هي ‎ .xml أو محدّدة في رمز Kotlin)

ImageBitmap

في أداة "الإنشاء"، يمكن تحميل صورة نقطية (يُشار إليها غالبًا باسم 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

يكون VectorPainter مسؤولاً عن رسم ImageVector على الشاشة. يتيح ImageVector مجموعة فرعية من أوامر SVG. لا يمكن تمثيل بعض الصور كرسومات متحركة (على سبيل المثال، لا يمكن تحويل الصور التي تلتقطها بالكاميرا إلى رسومات متحركة).

يمكنك إنشاء ImageVector مخصّص إما من خلال استيراد ملف XML لرسم ImageVector متوفّر (تم استيراده إلى "استوديو Android" باستخدام أداة الاستيراد) أو تنفيذ الفئة وإصدار أوامر المسار يدويًا.

في حالات الاستخدام البسيطة، تعمل 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)