Jetpack Compose中如何从Painter获取ImageBitmap?
Jetpack Compose中如何从Painter获取ImageBitmap?
嗨,我来帮你搞定这个问题!在Jetpack Compose里要把Painter转成ImageBitmap,其实有两种实用的思路,根据你的场景选就行:
如果你的Painter是BitmapPainter实例
这种情况最直接,因为BitmapPainter本身就持有一个ImageBitmap对象,直接取它的bitmap属性就好。比如你用painterResource加载本地图片时,返回的就是BitmapPainter:val myPainter = painterResource(id = R.drawable.my_image) if (myPainter is BitmapPainter) { val imageBitmap = myPainter.bitmap // 接下来就可以用这个imageBitmap创建Image() Composable了 Image(bitmap = imageBitmap, contentDescription = "My image") }通用转换方法(适用于所有Painter类型)
如果不确定Painter的具体类型,或者是VectorPainter这类非Bitmap的Painter,我们可以通过绘制到Canvas的方式生成ImageBitmap。这里给你写个扩展函数,直接就能用:fun Painter.toImageBitmap(): ImageBitmap { // 先获取Painter的尺寸,转换成整数像素值 val width = size.width.toInt() val height = size.height.toInt() // 创建对应尺寸的ImageBitmap val imageBitmap = ImageBitmap(width, height) // 在这个ImageBitmap对应的Canvas上绘制当前Painter Canvas(imageBitmap).apply { drawPainter(this@toImageBitmap) } return imageBitmap }使用的时候就很简单:
val anyPainter: Painter = ... // 任意类型的Painter val imageBitmap = anyPainter.toImageBitmap() Image(bitmap = imageBitmap, contentDescription = "Converted image")注意:如果你的Painter没有明确的尺寸(比如设置了
fillSize()),最好先给它指定具体的宽高,不然可能会生成尺寸为0的无效ImageBitmap。
备注:内容来源于stack exchange,提问作者Mahozad
相关产品推荐
相关产品推荐

