Android ColorMatrix setSaturation() 是否支持大于 1 的值?
Does Android ColorMatrix setSaturation() support values greater than one?
查看 Android 文档,ColorMatrix setSaturation() method 说:
Set the matrix to affect the saturation of colors. A value of 0 maps the color to gray-scale. 1 is identity.
我正在尝试提高饱和度(根据 HSL/HSV)以获得更强烈的色彩,所以我通过了 1.6,它似乎有效。我已经 运行 遇到 Android 布局 shadowRadius 值小于 1 的特定于设备的问题,那么是否存在使用此参数并超出指定范围的此类问题的危险?
饱和度的范围确实在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 的值为负值,并且如您所见,它也可能导致更大的问题。
查看 Android 文档,ColorMatrix setSaturation() method 说:
Set the matrix to affect the saturation of colors. A value of 0 maps the color to gray-scale. 1 is identity.
我正在尝试提高饱和度(根据 HSL/HSV)以获得更强烈的色彩,所以我通过了 1.6,它似乎有效。我已经 运行 遇到 Android 布局 shadowRadius 值小于 1 的特定于设备的问题,那么是否存在使用此参数并超出指定范围的此类问题的危险?
饱和度的范围确实在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 的值为负值,并且如您所见,它也可能导致更大的问题。