Java 通过给定颜色Int的因子获得较暗的颜色
这是我如何得到一个给定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) *
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