如何在 android compose 中显示黑白图像
How to show Image in black and white in android compose
我正在尝试使用 android compose 将显示的彩色图像转换为黑白图像。
在视图系统中,我可以通过添加这样的过滤器将图像从彩色更改为黑白
imageView.colorFilter = ColorMatrixColorFilter(ColorMatrix().apply { setSaturation(0f)})
如图.
在 Android Compose 中,Image 可组合函数已经采用滤色器,但我在 compose 包中找不到等效的 ColorMatrixColorFilter。
这是我要转换为灰度的图像代码
Image(
asset = vectorResource(id = R.drawable.xxx),
modifier = Modifier.clip(RectangleShape).size(36.dp, 26.dp),
alpha = alpha,
alignment = Alignment.Center,
contentScale = ContentScale.Fit
)
我尝试了这个答案并为我工作:
Convert a Bitmap to GrayScale in Android
因此,您只需要使用 toGrayscale
函数...
这是我做的:
@Composable
fun GrayscaleImage() {
val context = AmbientContext.current
val image = remember {
val drawable = ContextCompat.getDrawable(
context, R.drawable.your_drawable
).toBitmap()!!.toGrayScale().asImageBitmap()
}
Image(image)
}
object Constants{
val grayPaint = android.graphics.Paint()
init {
val cm = ColorMatrix()
cm.setSaturation(0f)
val f = ColorMatrixColorFilter(cm)
grayPaint.colorFilter = f
}
}
fun Bitmap.toGrayscale(): Bitmap {
val height: Int = this.height
val width: Int = this.width
val bmpGrayscale: Bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
val c = Canvas(bmpGrayscale)
c.drawBitmap(this, 0f, 0f, Constants.grayPaint)
return bmpGrayscale
}
我希望我没有误解这个问题,但这帮助我将图像转换为灰度。这是根据当前的 Compose 版本 1.0.0-beta01
val grayScaleMatrix = ColorMatrix(
floatArrayOf(
0.33f, 0.33f, 0.33f, 0f, 0f,
0.33f, 0.33f, 0.33f, 0f, 0f,
0.33f, 0.33f, 0.33f, 0f, 0f,
0f, 0f, 0f, 1f, 0f
)
)
Image(
painter = painterResource(id = imageId),
contentDescription = "",
colorFilter = ColorFilter.colorMatrix(matrix)
)
我正在尝试使用 android compose 将显示的彩色图像转换为黑白图像。
在视图系统中,我可以通过添加这样的过滤器将图像从彩色更改为黑白
imageView.colorFilter = ColorMatrixColorFilter(ColorMatrix().apply { setSaturation(0f)})
如图
在 Android Compose 中,Image 可组合函数已经采用滤色器,但我在 compose 包中找不到等效的 ColorMatrixColorFilter。
这是我要转换为灰度的图像代码
Image(
asset = vectorResource(id = R.drawable.xxx),
modifier = Modifier.clip(RectangleShape).size(36.dp, 26.dp),
alpha = alpha,
alignment = Alignment.Center,
contentScale = ContentScale.Fit
)
我尝试了这个答案并为我工作: Convert a Bitmap to GrayScale in Android
因此,您只需要使用 toGrayscale
函数...
这是我做的:
@Composable
fun GrayscaleImage() {
val context = AmbientContext.current
val image = remember {
val drawable = ContextCompat.getDrawable(
context, R.drawable.your_drawable
).toBitmap()!!.toGrayScale().asImageBitmap()
}
Image(image)
}
object Constants{
val grayPaint = android.graphics.Paint()
init {
val cm = ColorMatrix()
cm.setSaturation(0f)
val f = ColorMatrixColorFilter(cm)
grayPaint.colorFilter = f
}
}
fun Bitmap.toGrayscale(): Bitmap {
val height: Int = this.height
val width: Int = this.width
val bmpGrayscale: Bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
val c = Canvas(bmpGrayscale)
c.drawBitmap(this, 0f, 0f, Constants.grayPaint)
return bmpGrayscale
}
我希望我没有误解这个问题,但这帮助我将图像转换为灰度。这是根据当前的 Compose 版本 1.0.0-beta01
val grayScaleMatrix = ColorMatrix(
floatArrayOf(
0.33f, 0.33f, 0.33f, 0f, 0f,
0.33f, 0.33f, 0.33f, 0f, 0f,
0.33f, 0.33f, 0.33f, 0f, 0f,
0f, 0f, 0f, 1f, 0f
)
)
Image(
painter = painterResource(id = imageId),
contentDescription = "",
colorFilter = ColorFilter.colorMatrix(matrix)
)