作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下面是我如何在给定 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/
我是一名优秀的程序员,十分优秀!