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 toGrayscaleFunktion 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
}