Android jetpack compose canvas:如何调整drawImage函数的亮度、对比度、饱和度?

问题描述 投票:0回答:1

在画布中使用drawImage时,有什么方法可以调整图像的亮度对比度饱和度温暖度,...。我尝试了一切,但只能同时调整饱和度或亮度和对比度。我发现了一些像 postconcat 矩阵的方法,但是 compose 中的 ColorMatrix 没有 postconcat 方法:(

                drawImage(
                    imageBitmaps[currentBitmapIndex].image,
                    dstOffset = IntOffset.Zero,
                    dstSize = IntSize(viewWidth, viewHeight),
                    colorFilter = ColorFilter.colorMatrix(ColorMatrix(
                        // Brightness and contrast
                        floatArrayOf(
                            contrast, 0f, 0f, 0f, brightness,
                            0f, contrast, 0f, 0f, brightness,
                            0f, 0f, contrast, 0f, brightness,
                            0f, 0f, 0f, 1f, 0f
                        )
                    ).apply {
                        // saturation
                        setToSaturation(saturation)
                        // just one of them work. if i remove setToSaturation brightness and contrast work fine
                        // or saturation override and brightness and contrast 
                    })
                )
///
android kotlin android-jetpack-compose android-canvas
1个回答
0
投票

android.graphics.ColorMatrix
具有
postConcat
功能,但
androidx.compose.ui.graphics.ColorMatrix
timesAssign
代替它。

为了实现你想要的,你可以这样做:

drawImage(
    imageBitmaps[currentBitmapIndex].image,
    dstOffset = IntOffset.Zero,
    dstSize = IntSize(viewWidth, viewHeight),
    colorFilter = ColorFilter.colorMatrix(ColorMatrix(
        // Brightness and contrast
        floatArrayOf(
            contrast, 0f, 0f, 0f, brightness,
            0f, contrast, 0f, 0f, brightness,
            0f, 0f, contrast, 0f, brightness,
            0f, 0f, 0f, 1f, 0f
        )
    ).apply {
        // saturation
        val saturationMatrix = ColorMatrix()
        saturationMatrix.setToSaturation(saturation)
        timesAssign(saturationMatrix)
    })

在这里查看:Android 开发者资源

© www.soinside.com 2019 - 2024. All rights reserved.