Jetpack Compose使用Painter在图像上绘制。

8
使用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代替。 imageResourceloadImageResourcevectorResourceloadVectorResource已被弃用,请使用painterResource代替。(I6b809)

alpha12版本中,imageResource已被弃用。在painter中绘制图像的drawImage(imageBitmap)函数没有其他替代品或者能够接受图像位图作为参数的函数?

在alpha12版本中,ImageBitmap有何意义,因为不存在可以使用资源创建它的非废弃函数,也不存在从Painter获取ImageBitmap的函数。

4个回答

12

Compose UI 1.0.0-beta01开始,imageResource和vectorResource现在是ImageBitmap和ImageVector companions的扩展函数。load {Image,Vector,Font} Resource函数已被删除。(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
  )

是的,看起来这就是用来创建imageBitmap的函数。 - Thracian
截至beta01,我猜它已经消失了。难道没有一种从资源或可绘制对象中获取ImageBitmap的组合方式吗? - Thracian
1
@Thracian 现在它是扩展函数 imageResource - Spatz

5

如果您需要从drawable文件夹设置ImageVector,请使用以下方法:

ImageVector.vectorResource(id = R.drawable.ic_example)

ic_example是从svg文件转换而来的向量".xml"文件


2
我使用这种方法来使用位图或SVG。
Image(
    painterResource(id = R.drawable.video),
    contentDescription = "",
)

2

使用Compose 1.0稳定版及以上版本,您应该使用

useResource("image.png") { loadImageBitmap(it) }

这将返回一个ImageBitmap对象。

还有painterResource("image.png"),但这将返回一个Painter对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接