Android ColorMatrix setSaturation()是否支持大于1的值?

时间:2016-03-06 00:42:19

标签: android image-manipulation colormatrix

查看Android文档,ColorMatrix setSaturation() method说:

  

设置矩阵以影响颜色饱和度。值0将颜色映射到灰度。 1是身份。

我正在尝试提高饱和度(就HSL / HSV而言)以获得更强烈的色彩,所以我通过1.6并且它似乎有效。我遇到了Android布局shadowRadius值小于1的特定于设备的问题,因此这个参数存在这类问题并且超出指定范围的危险吗?

1 个答案:

答案 0 :(得分:2)

饱和度的范围确实介于0和1之间。但是让我们看一下setSaturation()方法的代码。 (Android is open source)

public void setSaturation(float sat) {
    reset();
    float[] m = mArray;

    final float invSat = 1 - sat; //<---------invSat will be negative if sat bigger than 1
    final float R = 0.213f * invSat;
    final float G = 0.715f * invSat;
    final float B = 0.072f * invSat;

    m[0] = R + sat; m[1] = G;       m[2] = B;
    m[5] = R;       m[6] = G + sat; m[7] = B;
    m[10] = R;      m[11] = G;      m[12] = B + sat;
}

指出了我们关心的部分代码。如您所见,该方法将接受您的输入并从1中减去它。如果您输入的值大于1,这将导致invSat的负值,并且您可以看到它也可能导致更大的问题。