【问题标题】:Get Darker Color by Factor Given Color Int通过给定颜色 Int 的因子获取更深的颜色
【发布时间】:2016-01-06 11:17:14
【问题描述】:

这是我如何在给定 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);
}

【问题讨论】:

    标签: java android android-color


    【解决方案1】:

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

    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) == 0,所以red == green == blue == 0,即新颜色是黑色。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-09
      • 2013-02-14
      • 2011-10-25
      • 2010-09-10
      • 2013-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多