通过因子给出颜色Int获得更暗的颜色

时间:2016-01-06 11:17:14

标签: java android android-color

以下是给出int的更轻的颜色。但我想知道如何将其转换为更深的颜色?

我应该如何修改下面的方法以获得更深的颜色?

public static int getLighterColorByValue(int color, float factor) {
    int red = (int) ((Color.red(color) * (1 - factor) / 255 + factor) * 255);
    int green = (int) ((Color.green(color) * (1 - factor) / 255 + factor) * 255);
    int blue = (int) ((Color.blue(color) * (1 - factor) / 255 + factor) * 255);
    return Color.argb(Color.alpha(color), red, green, blue);
}

1 个答案:

答案 0 :(得分:2)

仅考虑红色通道(因为其他通道的逻辑相同):

int red = (int) ((Color.red(color) * (1 - factor) / 255 + factor) * 255);

您正在计算当前红色通道与255(全强度)之间的加权和。简而言之:

int newRed = (1 - factor) * oldRed + factor * 255;

因此,不是以全强度混合,而是以零强度混合:

int newRed = (1 - factor) * oldRed + factor * 0;

或更简单地说:

int newRed = (1 - factor) * oldRed;

因此,使用原始代码的格式,只需删除+ factor

即可
int red = (int) ((Color.red(color) * (1 - factor) / 255) * 255);

但由于1 - factorfloat,除以255并乘以255会再次返回相同的数字。所以,更简单:

int red = (int) ((Color.red(color) * (1 - factor));
int green = (int) ((Color.green(color) * (1 - factor));
int blue = (int) ((Color.blue(color) * (1 - factor));

完整性检查:

  • 如果factor == 0,则新颜色与原始颜色相同
  • factor == 1(1 - factor) == 0red == green == blue == 0,即新颜色为黑色。