我正在改变图像视图的亮度、对比度、饱和度和色调。我搜了很多。
我有一些和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,
0, 0, 1, 0, brightness,
0, 0, 0, 1, 0 });
myImageView.setColorFilter(new ColorMatrixColorFilter(cmB));
工作正常。
[2.]对于对比度,ColorMatrix是不同的,它也能正常工作。
但是,所有这些颜色矩阵都是单独工作的。意味着上次应用的ColorMatrix的效果是ImageView上的唯一场景,因为它确实做到了,这将移除先前应用的ColorMatrix的效果,并设置上次应用的ColorMatrix。
现在我想合并或混合所有的颜色矩阵。意思是要应用对比度的颜色矩阵对亮度/饱和度/色调的颜色矩阵的影响。
最佳答案
如果要应用两个颜色矩阵,只需将它们相乘即可。
如果有颜色矩阵A和颜色矩阵B,则:
C = B * A;
outpixel = C * inpixel
相当于
outpixel = B * A * inpixel
编辑
我刚刚注意到这些是5x4矩阵(最初我以为它们是4x4)。由于不能直接相乘,我认为在相乘之前(使它们都是5x5)向两个矩阵中添加第五个标识行(0,0,0,0,1)并在相乘之后丢弃第五行是合适的。