首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用幻灯片/线圈绘制ImageBitmap到画布

使用幻灯片/线圈绘制ImageBitmap到画布
EN

Stack Overflow用户
提问于 2022-11-18 12:42:18
回答 2查看 57关注 0票数 2

我使用的是一个@Composable,在这里我需要通过参数a ImageBitmap传递图像,问题是我从服务器获得了一个url,所以我需要加载这些映像,将它们转换成一个Bitmap,然后再转换成一个ImageBitmap,但是我被困住了,因为我不知道如何将它转换为ImageBitmap,这是我的@Composable

代码语言:javascript
复制
@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时,我需要加载图像,但我不知道如何开始,我需要知道什么是更好的使用幻灯片或线圈。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-11-18 14:56:24

您不需要ImageBitmap将其绘制到画布中。你可以在DrawScope里面画画家。实际上,您甚至不需要画布功能。androidx.compose.foundation.Canvas只不过是一个带有Modifier.drawBehind的空间

代码语言:javascript
复制
@Composable
fun Canvas(modifier: Modifier, onDraw: DrawScope.() -> Unit) =
    Spacer(modifier.drawBehind(onDraw))

对你的问题的回答是

代码语言:javascript
复制
@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。

代码语言:javascript
复制
/**
 * 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)
票数 5
EN

Stack Overflow用户

发布于 2022-11-18 15:39:05

因此,很明显,色雷斯博士为你提供了一个最佳的解决方案,这是他从几个世纪来治疗疾病代码的经验中提炼出来的。你可以这么做。但是,从您在问题中提供的描述来看,似乎您主要想要的只是一种将Bitmap转换为ImageBitmap对象的方法。现在有一个方便的asImageBitmap()扩展函数可以与位图一起使用。所以,你可以简单的利用一下。

就Glide而言,两者都有流行的API方法,我认为它们实现了类似的目标/性能。现在,据我所知,线圈是第一个迁移来写作的人。我只使用线圈,因为我需要从一个url中获取一个图像,并且只想简单地显示它,所以Coil为它提供了一个非常直接的API,rememberCoilPainter()就像重力一样工作。没有真正使用另一个,只是谷歌都在寻找一个比较。它将是绝对可用的,或者只是深入了解这两种方法的文档,看看哪些方法是可用的,并在设计代码结构的同时在您的头脑中这样做;选择一个更容易实现。这个网站通常不是用来征求意见的,所以我会把它放在那里。不错的窍门--文档越好,API就越好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74489866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档