Cara menampilkan gambar hitam putih di Android compose

Dec 02 2020

Saya mencoba untuk mengubah gambar berwarna yang ditampilkan menjadi hitam dan putih menggunakan android compose.

Dalam sistem tampilan, saya dapat mengubah gambar dari berwarna menjadi hitam putih dengan menambahkan filter seperti itu

imageView.colorFilter = ColorMatrixColorFilter(ColorMatrix().apply { setSaturation(0f)})

seperti yang ditunjukkan dalam jawaban ini .

Di Android Compose, fungsi Image yang bisa disusun sudah menggunakan filter warna tetapi saya tidak dapat menemukan padanan ColorMatrixColorFilter dalam paket tulis.

Berikut adalah kode gambar yang ingin saya ubah menjadi grayscale

 Image(
            asset = vectorResource(id = R.drawable.xxx),
            modifier = Modifier.clip(RectangleShape).size(36.dp, 26.dp),
            alpha = alpha,
            alignment = Alignment.Center,
            contentScale = ContentScale.Fit
        )

Jawaban

nglauber Jan 09 2021 at 20:59

Saya mencoba jawaban ini dan bekerja untuk saya: Ubah Bitmap ke GrayScale di Android

Jadi, Anda hanya perlu menggunakan toGrayscalefungsi ...

Inilah yang saya lakukan:

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