我正在更改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,
0, 0, 1, 0, brightness,
0, 0, 0, 1, 0 });
myImageView.setColorFilter(new ColorMatrixColorFilter(cmB));
正确地工作.
[2.]对于对比度ColorMatrix是不同的,它也可以正常工作.
但是,所有这些ColorMatrix都可以单独工作.意味着最后一次应用ColorMatrix的效果仅在ImageView上发生,因为它确实做到了这一点,从而消除了之前应用的ColorMatrix的影响,并且设置最后一次应用了ColorMatrix.
现在,我想同时合并或混合所有的ColorMatrix.意味着要在Brightnrs / Saturation / Hue的ColorMatrix效果上应用对比度ColorMatrix.
解决方法:
如果要应用两个颜色矩阵,只需将它们相乘即可.
如果您具有颜色矩阵A和颜色矩阵B,则:
C = B * A;
outpixel = C * inpixel
相当于
outpixel = B * A * inpixel
编辑
我只是注意到这些是5×4矩阵(本来我以为是4×4).由于您不能直接将它们相乘,因此我认为将两个矩阵相乘之前相加第五个标识行(0,0,0,0,1)(使它们都为5×5)并在此之后丢弃第五行是合适的倍增.