首页 > 解决方案 > Jetpack Compose 使用 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。请改用 fontResource。不推荐使用 imageResource、loadImageResource、vectorResource 和 loadVectorResource。请改用painterResource。(I6b809)

不推荐使用alpha12 imageResourcepainterdrawImage(imageBitmap)绘制图像的函数没有替换或其他函数以外的其他函数以 imageBitmap 作为参数?

ImageBitmap 从 alpha12 开始有什么意义,因为没有不推荐使用的函数来使用资源创建它,并且不存在从 Painter 获取 ImageBitmap 的函数。

标签: androidandroid-jetpack-compose

解决方案


Compose UI 1.0.0-beta01开始

imageResource 和 vectorResource 现在分别是 ImageBitmap 和 ImageVector 同伴的扩展函数。load{Image,Vector,Font}资源函数已被删除。(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
  )

推荐阅读