【发布时间】:2021-04-15 14:39:24
【问题描述】:
基于this page中的图片和PorterDuffModes
我下载了图片,虽然它们最初是 png,但它们有不透明的浅灰色和深灰色矩形并将它们删除。
并使用this sample code 进行检查,将drawables 替换为原始代码中的drawables,然后我得到结果
看起来它可以在 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 堆叠在一起的 2 张图片
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 矩形是可见的。
也尝试了Painter,但也无法使其工作
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 一起使用?
【问题讨论】:
标签: android canvas android-jetpack-compose porter-duff