3

我正在更改 ImageView 的亮度、对比度、饱和度和色调。我已经搜索了很多。

我得到了一些适用于ColorMatrix 的代码。

[1.]对于Brightness 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。

现在我想同时合并或混合所有颜色矩阵。表示要对 Brightnrs/Saturation/Hue 的 ColorMatrix 的效果应用对比度的 ColorMatrix。

4

2 回答 2

3

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

如果您有颜色矩阵 A 和颜色矩阵 B,则:

C = B * A;
outpixel = C * inpixel 

相当于

outpixel = B * A * inpixel

编辑

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

于 2012-08-15T18:55:36.453 回答
0

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

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

imageView.setColorFilter(new ColorMatrixColorFilter(colorFilterMatrix));
于 2014-01-31T12:31:36.480 回答