在画布中使用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.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 开发者资源