Como mostrar a imagem em preto e branco na composição do Android
Dec 02 2020
Estou tentando converter a imagem colorida mostrada em preto e branco usando a composição do Android.
No sistema de visualização, eu poderia mudar a imagem de colorida para preto e branco adicionando um filtro como esse
imageView.colorFilter = ColorMatrixColorFilter(ColorMatrix().apply { setSaturation(0f)})
como mostrado nesta resposta .
No Android Compose, a função de composição de imagem já usa o filtro de cores, mas não consigo encontrar o equivalente em ColorMatrixColorFilter no pacote de composição.
Aqui está o código da imagem que desejo converter para escala de cinza
Image(
asset = vectorResource(id = R.drawable.xxx),
modifier = Modifier.clip(RectangleShape).size(36.dp, 26.dp),
alpha = alpha,
alignment = Alignment.Center,
contentScale = ContentScale.Fit
)
Respostas
nglauber Jan 09 2021 at 20:59
Tentei esta resposta e funcionou para mim: Converter um bitmap em GrayScale no Android
Então, você só precisa usar a toGrayscale
função ...
Isso é o que eu fiz:
@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
}
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
Christopher Nolan uma vez se arrependeu de ter lido o 'roteiro de Pulp Fiction' de Quentin Tarantino