Jetpack Compose 使用 Painter 在图像上绘制
Jetpack Compose draw on image with Painter
使用 painter 可以使用代码段在 ImageBitmap 上绘图
val imageBitmap: ImageBitmap = imageResource(id = R.drawable.landscape3)
val customPainter = remember {
object : Painter() {
override val intrinsicSize: Size
get() = Size(imageBitmap.width.toFloat(), imageBitmap.height.toFloat())
override fun DrawScope.onDraw() {
drawImage(imageBitmap)
drawLine(
color = Color.Red,
start = Offset(0f, 0f),
end = Offset(imageBitmap.width.toFloat(), imageBitmap.height.toFloat()),
strokeWidth = 5f
)
}
}
}
Image(painter = customPainter, contentDescription = null)
loadFontResource is deprecated. Use fontResource instead.
imageResource, loadImageResource, vectorResource, and
loadVectorResource are deprecated. Use painterResource instead.
(I6b809)
with alpha12 imageResource
已弃用。 painter
的drawImage(imageBitmap)
绘制图片的函数没有替代品或者除了以imageBitmap为参数的函数之外还有其他函数?
从 alpha12 开始,ImageBitmap 有什么意义,因为没有不推荐使用的函数来使用资源创建它,并且不存在从 Painter 获取 ImageBitmap 的函数。
我用这个方法使用位图或者SVG
Image(
painterResource(id = R.drawable.video),
contentDescription = "",
)
imageResource and vectorResource are now extension functions on ImageBitmap and ImageVector companions respectively. load{Image,Vector,Font}Resource functions have been deleted. (I89130)
import androidx.compose.ui.res.imageResource
// ...
val imageBitmap: ImageBitmap = ImageBitmap.imageResource(R.drawable.landscape3)
painterResource 在后台调用 imageFromResource,所以我们也可以使用它:
val imageBitmap: ImageBitmap = imageFromResource(
LocalContext.current.resources,
R.drawable.landscape3
)
对于 Compose 1.0 稳定版及更高版本,您应该使用
useResource("image.png") { loadImageBitmap(it) }
这将 return 一个 ImageBitmap
对象。
还有 painterResource("image.png")
但这将 return 一个 Painter
对象。
如果您需要从可绘制文件夹中设置 ImageVector,请使用:
ImageVector.vectorResource(id = R.drawable.ic_example)
ic_example 是从 svg 文件添加的矢量“.xml”文件
使用 painter 可以使用代码段在 ImageBitmap 上绘图
val imageBitmap: ImageBitmap = imageResource(id = R.drawable.landscape3)
val customPainter = remember {
object : Painter() {
override val intrinsicSize: Size
get() = Size(imageBitmap.width.toFloat(), imageBitmap.height.toFloat())
override fun DrawScope.onDraw() {
drawImage(imageBitmap)
drawLine(
color = Color.Red,
start = Offset(0f, 0f),
end = Offset(imageBitmap.width.toFloat(), imageBitmap.height.toFloat()),
strokeWidth = 5f
)
}
}
}
Image(painter = customPainter, contentDescription = null)
loadFontResource is deprecated. Use fontResource instead. imageResource, loadImageResource, vectorResource, and loadVectorResource are deprecated. Use painterResource instead. (I6b809)
with alpha12 imageResource
已弃用。 painter
的drawImage(imageBitmap)
绘制图片的函数没有替代品或者除了以imageBitmap为参数的函数之外还有其他函数?
从 alpha12 开始,ImageBitmap 有什么意义,因为没有不推荐使用的函数来使用资源创建它,并且不存在从 Painter 获取 ImageBitmap 的函数。
我用这个方法使用位图或者SVG
Image(
painterResource(id = R.drawable.video),
contentDescription = "",
)
imageResource and vectorResource are now extension functions on ImageBitmap and ImageVector companions respectively. load{Image,Vector,Font}Resource functions have been deleted. (I89130)
import androidx.compose.ui.res.imageResource
// ...
val imageBitmap: ImageBitmap = ImageBitmap.imageResource(R.drawable.landscape3)
painterResource 在后台调用 imageFromResource,所以我们也可以使用它:
val imageBitmap: ImageBitmap = imageFromResource(
LocalContext.current.resources,
R.drawable.landscape3
)
对于 Compose 1.0 稳定版及更高版本,您应该使用
useResource("image.png") { loadImageBitmap(it) }
这将 return 一个 ImageBitmap
对象。
还有 painterResource("image.png")
但这将 return 一个 Painter
对象。
如果您需要从可绘制文件夹中设置 ImageVector,请使用:
ImageVector.vectorResource(id = R.drawable.ic_example)
ic_example 是从 svg 文件添加的矢量“.xml”文件