我使用的是一个@Composable,在这里我需要通过参数a ImageBitmap传递图像,问题是我从服务器获得了一个url,所以我需要加载这些映像,将它们转换成一个Bitmap,然后再转换成一个ImageBitmap,但是我被困住了,因为我不知道如何将它转换为ImageBitmap,这是我的@Composable
@ExperimentalComposeUiApi
@Composable
fun MyCanvas(
myImage: ImageBitmap,
modifier: Modifier = Modifier,
) {
Canvas(modifier = modifier
.size(220.dp)
.clipToBounds()
.clip(RoundedCornerShape(size = 16.dp)) {
...
val canvasWidth = size.width.toInt()
val canvasHeight = size.height.toInt()
val imageSize = IntSize(width = canvasWidth, height = canvasHeight)
drawImage(
image = myImage, dstSize = imageSize
)
...
}
}所以,当我调用这个@Composable时,我需要加载图像,但我不知道如何开始,我需要知道什么是更好的使用幻灯片或线圈。
发布于 2022-11-18 14:56:24
您不需要ImageBitmap将其绘制到画布中。你可以在DrawScope里面画画家。实际上,您甚至不需要画布功能。androidx.compose.foundation.Canvas只不过是一个带有Modifier.drawBehind的空间
@Composable
fun Canvas(modifier: Modifier, onDraw: DrawScope.() -> Unit) =
Spacer(modifier.drawBehind(onDraw))对你的问题的回答是
@Composable
private fun MyComposable() {
val sizeModifier = Modifier
.fillMaxWidth()
val url =
"https://avatars3.githubusercontent.com/u/35650605?s=400&u=058086fd5c263f50f2fbe98ed24b5fbb7d437a4e&v=4"
Column(
modifier =Modifier.fillMaxSize()
) {
val painter = rememberAsyncImagePainter(
model = url
)
Canvas(modifier = Modifier
.clip(RoundedCornerShape(size = 16.dp))
.size(220.dp)
) {
with(painter) {
draw(size = size)
}
}
}
}当应用Modifier.clip()时,不必应用Modifier.clipToBounds()
这两者都是一样的,剪贴画使用形状额外的clipToBounds。
/**
* Clip the content to the bounds of a layer defined at this modifier.
*/
@Stable
fun Modifier.clipToBounds() = graphicsLayer(clip = true)
/**
* Clip the content to [shape].
*
* @param shape the content will be clipped to this [Shape].
*/
@Stable
fun Modifier.clip(shape: Shape) = graphicsLayer(shape = shape, clip = true)发布于 2022-11-18 15:39:05
因此,很明显,色雷斯博士为你提供了一个最佳的解决方案,这是他从几个世纪来治疗疾病代码的经验中提炼出来的。你可以这么做。但是,从您在问题中提供的描述来看,似乎您主要想要的只是一种将Bitmap转换为ImageBitmap对象的方法。现在有一个方便的asImageBitmap()扩展函数可以与位图一起使用。所以,你可以简单的利用一下。
就Glide而言,两者都有流行的API方法,我认为它们实现了类似的目标/性能。现在,据我所知,线圈是第一个迁移来写作的人。我只使用线圈,因为我需要从一个url中获取一个图像,并且只想简单地显示它,所以Coil为它提供了一个非常直接的API,rememberCoilPainter()就像重力一样工作。没有真正使用另一个,只是谷歌都在寻找一个比较。它将是绝对可用的,或者只是深入了解这两种方法的文档,看看哪些方法是可用的,并在设计代码结构的同时在您的头脑中这样做;选择一个更容易实现。这个网站通常不是用来征求意见的,所以我会把它放在那里。不错的窍门--文档越好,API就越好。
https://stackoverflow.com/questions/74489866
复制相似问题