Android 合并两个ColorMatrix或在Imageview上同时应用两个或多个ColorMatrix
我正在更改ImageView的亮度、对比度、饱和度和色调。我在上面找了很多 我得到了一些与ColorMatrix一起工作的代码。 [1.]对于亮度而言,ColorMatrix类似于Android 合并两个ColorMatrix或在Imageview上同时应用两个或多个ColorMatrix,android,image-processing,android-imageview,android-image,colormatrix,Android,Image Processing,Android Imageview,Android Image,Colormatrix,我正在更改ImageView的亮度、对比度、饱和度和色调。我在上面找了很多 我得到了一些与ColorMatrix一起工作的代码。 [1.]对于亮度而言,ColorMatrix类似于 float brightness = (-50F * 1.5F); ColorMatrix cmB = new ColorMatrix(); cmB.set(new float[] { 1, 0, 0, 0, brightness, 0, 1, 0, 0,brightness,
float brightness = (-50F * 1.5F);
ColorMatrix cmB = new ColorMatrix();
cmB.set(new float[] { 1, 0, 0, 0, brightness,
0, 1, 0, 0,brightness,
0, 0, 1, 0, brightness,
0, 0, 0, 1, 0 });
myImageView.setColorFilter(new ColorMatrixColorFilter(cmB));
它工作正常
[2.]对于对比度而言,ColorMatrix是不同的,它也能正常工作
但是,所有这些ColorMatrix单独工作。意味着上次应用的ColorMatrix的效果是ImageView上唯一的场景,因为它确实做到了这一点,消除了先前应用的ColorMatrix的效果,并设置上次应用ColorMatrix
现在我想同时合并或混合所有颜色矩阵。意味着要在亮度/饱和度/色调的颜色矩阵的效果上应用对比度的颜色矩阵。如果要应用两个颜色矩阵,只需将它们相乘即可 如果有颜色矩阵A和颜色矩阵B,则:
C = B * A;
outpixel = C * inpixel
相当于
outpixel = B * A * inpixel
编辑
我只是注意到这些是5x4矩阵(最初我认为它们是4x4)。由于不能直接相乘,我认为在相乘之前向两个矩阵添加第五个标识行(0,0,0,0,1)是合适的(使它们都为5x5),并在相乘后丢弃第五行。您可以这样应用多个矩阵:
ColorMatrix colorFilterMatrix = new ColorMatrix();
colorFilterMatrix.postConcat(getContrastMatrix(contrast));
colorFilterMatrix.postConcat(getBrightnessMatrix(brightness));
imageView.setColorFilter(new ColorMatrixColorFilter(colorFilterMatrix));