Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将PorterDuffMode应用于图像的Jetpack合成_Android_Canvas_Android Jetpack Compose_Porter Duff - Fatal编程技术网

Android 将PorterDuffMode应用于图像的Jetpack合成

Android 将PorterDuffMode应用于图像的Jetpack合成,android,canvas,android-jetpack-compose,porter-duff,Android,Canvas,Android Jetpack Compose,Porter Duff,基于中的图像和PorterDuffModes 我下载了一些图片,最初,尽管它们是png,但它们有浅灰色和深灰色的矩形,这些矩形是不透明的,并将它们删除 并使用检查,将原始代码中的drawable替换为下面的那个些,我得到了结果 看起来它在Android View中的工作方式应该是一样的,但是当我使用Jetpack Canvas作为 androidx.compose.foundation.Canvas(modifier = Modifier.size(500.dp), onDraw =

基于中的图像和PorterDuffModes

我下载了一些图片,最初,尽管它们是png,但它们有浅灰色和深灰色的矩形,这些矩形是不透明的,并将它们删除

并使用检查,将原始代码中的drawable替换为下面的那个些,我得到了结果

看起来它在Android View中的工作方式应该是一样的,但是当我使用Jetpack Canvas作为

androidx.compose.foundation.Canvas(modifier = Modifier.size(500.dp),
    onDraw = {

        drawImage(imageBitmapDst)
        drawImage(imageBitmapSrc, blendMode = BlendMode.SrcIn)

    })
BlendMode.SrcIn在黑色矩形上绘制蓝色矩形,其他模式也不会返回正确的结果。BlendMode.SrcOut返回黑屏

并使用两个图像堆叠在一起,并带有
Box

val imageBitmapSrc: ImageBitmap = imageResource(id = R.drawable.c_src)
val imageBitmapDst: ImageBitmap = imageResource(id = R.drawable.c_dst)

Box {
    Image(bitmap = imageBitmapSrc)
    Image(
        bitmap = imageBitmapDst,
        colorFilter = ColorFilter(color = Color.Unspecified, blendMode = BlendMode.SrcOut)
    )
}
只有蓝色的src矩形可见

也尝试了
画师
,但也无法使其工作

val imageBitmapSrc: ImageBitmap = imageResource(id = R.drawable.c_src)
val imageBitmapDst: ImageBitmap = imageResource(id = R.drawable.c_dst)

val blendPainter = remember {
    object : Painter() {

        override val intrinsicSize: Size
            get() = Size(imageBitmapSrc.width.toFloat(), imageBitmapSrc.height.toFloat())

        override fun DrawScope.onDraw() {
            drawImage(imageBitmapDst, blendMode = BlendMode.SrcOut)
            drawImage(imageBitmapSrc)
        }
    }
}

Image(blendPainter)

Blend
PorterDuff
模式应该如何与Jetpack Compose一起使用?

我为类似的问题沮丧了整整一周,但是你的问题帮助我找到了如何使其工作的解决方案

我正在使用compose
1.0.0-beta03

这将是一个小小的即兴创作,因为我将从我的代码中手动翻译(因此,请让我知道它是否适用于您的情况):

所以,在位图的Canavas上操作是正确的,最后我只是在初始canva上绘制图像-类似于双缓冲

androidx.compose.foundation.Canvas(modifier = Modifier.size(500.dp),
    onDraw = {
        Canvas(imageBitmapDst).apply {
           drawImage(imageBitmapSrc, blendMode = BlendMode.SrcIn)
        }
        drawImage(imageBitmapDst)
    }
)