gpt4 book ai didi

java - 通过给定颜色 Int 的因子获得更深的颜色

转载 作者:行者123 更新时间:2023-11-29 20:11:57 24 4
gpt4 key购买 nike

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

最佳答案

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

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

您正在计算当前红色 channel 和 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) / 255) * 255);

但由于 1 - factor 是一个 float,除以 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 ,即新颜色为黑色。

关于java - 通过给定颜色 Int 的因子获得更深的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34631824/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com