Android 将PorterDuffMode应用于图像的Jetpack合成
基于中的图像和PorterDuffModes 我下载了一些图片,最初,尽管它们是png,但它们有浅灰色和深灰色的矩形,这些矩形是不透明的,并将它们删除 并使用检查,将原始代码中的drawable替换为下面的那个些,我得到了结果 看起来它在Android View中的工作方式应该是一样的,但是当我使用Jetpack Canvas作为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 =
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一起使用?我为类似的问题沮丧了整整一周,但是你的问题帮助我找到了如何使其工作的解决方案
我正在使用compose1.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)
}
)