Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过给定颜色Int的因子获得较暗的颜色_Java_Android_Android Color - Fatal编程技术网

Java 通过给定颜色Int的因子获得较暗的颜色

Java 通过给定颜色Int的因子获得较暗的颜色,java,android,android-color,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) *

这是我如何得到一个给定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);
}

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

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

int newRed = (1 - factor) * oldRed + factor * 255;
因此,不是以全强度混合,而是以零强度混合:

int newRed = (1 - factor) * oldRed + factor * 0;
或者,更简单地说:

int newRed = (1 - factor) * oldRed;
int red = (int) ((Color.red(color) * (1 - factor));
int green = (int) ((Color.green(color) * (1 - factor));
int blue = (int) ((Color.blue(color) * (1 - factor));
因此,使用原始代码的格式,只需删除
+因子

int red = (int) ((Color.red(color) * (1 - factor) / 255) * 255);
但是由于
1-因子
是一个
浮点数
,因此除以255再乘以255会使您再次回到相同的数字。因此,更简单地说:

int newRed = (1 - factor) * oldRed;
int red = (int) ((Color.red(color) * (1 - factor));
int green = (int) ((Color.green(color) * (1 - factor));
int blue = (int) ((Color.blue(color) * (1 - factor));
健全性检查:

  • 如果
    因子==0
    ,则新颜色与原始颜色相同
  • 因子==1
    (1-因子)==0
    ,因此
    红色==绿色==蓝色==0
    ,即新颜色为黑色