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

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

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

مثال على ملف JPEG
الشكل 1: مثال على ملف 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 مخصّص) وتحتاج إلى الوصول إلى 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)