合并两个ColorMatrix或在Imageview上同时应用两个或更多ColorMatrix

时间:2012-08-15 18:24:39

标签: 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,
    0, 0, 1, 0, brightness,
    0, 0, 0, 1, 0 });
    myImageView.setColorFilter(new ColorMatrixColorFilter(cmB));

正常工作。

[2。] 对于对比度,ColorMatrix是不同,也可以正常使用。

但是,所有这些ColorMatrix都可以单独使用。意味着最后应用的ColorMatrix的效果只是ImageView上的场景,因为它完全正确,删除先前应用的 ColorMatrix的效果,并且设置最后应用ColorMatrix。

现在我想合并或混合所有同时的ColorMatrix。意味着想要对ColorMatrix of Brightnrs / Saturation / Hue的效果应用ColorMatrix of Contrast。

2 个答案:

答案 0 :(得分:3)

如果你想应用两个颜色矩阵,只需将它们相乘即可。

如果你有颜色矩阵A和颜色矩阵B,那么:

C = B * A;
outpixel = C * inpixel 

相当于

outpixel = B * A * inpixel

修改

我刚注意到那些是5x4矩阵(最初我认为它们是4x4)。由于你不能直接乘以它们,我认为在乘法之前将两个矩阵添加第5个标识行(0,0,0,0,1)是合适的(使它们都是5x5),并在之后丢弃第5行乘法。

答案 1 :(得分:0)

您可以应用多个这样的矩阵:

ColorMatrix colorFilterMatrix = new ColorMatrix();
colorFilterMatrix.postConcat(getContrastMatrix(contrast));
colorFilterMatrix.postConcat(getBrightnessMatrix(brightness));

imageView.setColorFilter(new ColorMatrixColorFilter(colorFilterMatrix));