最常见的两种图像格式是栅格图像和矢量图像。
栅格图形格式包含像素:微小的独立方块,每个方块都包含一种颜色(由红色、绿色、蓝色和 alpha 值组成)。当大量像素组合在一起时,可以形成非常详细的图像,例如照片。栅格图形具有固定的分辨率(固定像素数)。这意味着当您放大图像时,它会失去细节,并可能出现像素化。栅格图形格式的示例包括 JPEG、PNG 和 WEBP。

另一方面,矢量图像是屏幕上视觉元素的数学可缩放表示。矢量是一组描述如何在屏幕上绘制图像的命令——例如,线条、点或填充。当在屏幕上缩放矢量时,它不会失去质量,因为数学公式会保持不同命令之间的关系。ImageVector 的一个很好的例子是 Material Symbols,因为它们都可以用数学公式定义。

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 命令的一个子集。并非所有图像都可以表示为矢量(例如,您用相机拍摄的照片无法转换为矢量)。
您可以通过导入现有矢量 drawable XML 文件(使用 导入工具 导入到 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)
为您推荐
- 注意:当 JavaScript 关闭时,会显示链接文本
- 自定义绘制器 {:#custom-painter}
- Compose 中的资源
- 加载图像 {:#loading-images}