合并两个ColorMatrix或在Imageview上同时应用两个或多个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,
    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)并在此之后丢弃第五行是合适的倍增.

上一篇:js基础---event事件对象 解决IE8兼容性问题 练习(1)


下一篇:CSS选择器