So zeigen Sie Bild in Schwarzweiß in Android Compose
Dec 02 2020
Ich versuche, das angezeigte farbige Bild mit Android Compose in Schwarzweiß umzuwandeln.
Im Ansichtssystem konnte ich das Bild durch Hinzufügen eines solchen Filters von farbig in schwarzweiß ändern
imageView.colorFilter = ColorMatrixColorFilter(ColorMatrix().apply { setSaturation(0f)})
wie in dieser Antwort gezeigt .
Im Android Compose das Bild nimmt zusammensetzbare Funktion bereits Farbfilter , aber ich kann nicht finden ColorMatrixColorFilter äquivalent in dem Compose - Paket.
Hier ist der Bildcode, den ich in Graustufen konvertieren möchte
Image(
asset = vectorResource(id = R.drawable.xxx),
modifier = Modifier.clip(RectangleShape).size(36.dp, 26.dp),
alpha = alpha,
alignment = Alignment.Center,
contentScale = ContentScale.Fit
)
Antworten
nglauber Jan 09 2021 at 20:59
Ich habe diese Antwort ausprobiert und für mich gearbeitet: Konvertieren Sie eine Bitmap in GrayScale in Android
Sie müssen also nur die toGrayscale
Funktion verwenden ...
Das habe ich getan:
@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
}