تصویر بیت‌مپ در مقابل تصویر برداری

دو نوع رایج از فرمت‌های تصویر، تصاویر رستری و برداری هستند.

یک قالب گرافیکی رستری شامل پیکسل‌ها است: مربع‌های کوچک منفردی که حاوی یک رنگ (متشکل از مقادیر قرمز، سبز، آبی و آلفا) هستند. با قرار دادن تعداد زیادی پیکسل در کنار هم، می‌توان تصویری بسیار دقیق مانند یک عکس تشکیل داد. یک تصویر رستری وضوح ثابتی (تعداد ثابتی پیکسل) دارد. این بدان معناست که وقتی اندازه تصویر را افزایش می‌دهید، جزئیات آن از بین می‌رود و پیکسلی شدن تصویر ممکن است رخ دهد. نمونه‌هایی از قالب‌های گرافیکی رستری عبارتند از JPEG، PNG و WEBP.

عکسی از نمای نزدیک از یک سگ گلدن رتریور.
شکل ۱. نمونه فایل JPEG.

از سوی دیگر، تصاویر برداری، نمایش‌های ریاضی مقیاس‌پذیر از یک عنصر بصری روی صفحه هستند. یک بردار مجموعه‌ای از دستورات است که نحوه ترسیم تصویر روی صفحه را توصیف می‌کند - برای مثال، یک خط، نقطه یا پر کردن. هنگام مقیاس‌بندی یک بردار روی صفحه، کیفیت آن از دست نمی‌رود، زیرا فرمول ریاضی رابطه بین دستورات مختلف را حفظ می‌کند. نمونه‌های خوب ImageVector نمادهای مواد هستند، زیرا همه آنها را می‌توان با فرمول‌های ریاضی تعریف کرد.

یک آیکون خطی ساده از یک سبد خرید با دسته، سبد و دو چرخ.
شکل ۲. مثال برداری (پسوند فایل‌ها .xml است یا با کد کاتلین تعریف شده‌اند).

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 از زیرمجموعه‌ای از دستورات گرافیک برداری مقیاس‌پذیر (SVG) پشتیبانی می‌کند. همه تصاویر را نمی‌توان به صورت برداری نمایش داد (برای مثال، عکس‌هایی که با دوربین خود می‌گیرید را نمی‌توان به برداری تبدیل کرد).

شما می‌توانید یک ImageVector سفارشی ایجاد کنید، یا با وارد کردن یک فایل XML بردار موجود (که با استفاده از ابزار import به اندروید استودیو وارد شده است) یا با پیاده‌سازی کلاس و صدور دستورات مسیر به صورت دستی.

برای موارد استفاده اولیه، تابع 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)

{% کلمه به کلمه %} {% فعل کمکی %} {% کلمه به کلمه %} {% فعل کمکی %}