Java 获取两种颜色之间的中间色
我有两种颜色的字符串表示法(例如:“Java 获取两种颜色之间的中间色,java,android,colors,gradient,median,Java,Android,Colors,Gradient,Median,我有两种颜色的字符串表示法(例如:“#FFFFFF”和“#000000”),我正在寻找一种通过编程获得这两种颜色中间色的方法。我称之为“中间色”的颜色是在中间与这两种颜色相交的颜色 我需要这个,以便分两步绘制渐变: 1从第一种颜色到中间带的渐变 1从中间色到第二种颜色的渐变 所以它看起来像是从第一种颜色到第二种颜色的渐变,这是我做不到的 我如何才能做到这一点?您可以尝试以下方法: new ArgbEvaluator().evaluate(0.5, 0xffffff, 0x000000);
#FFFFFF
”和“#000000
”),我正在寻找一种通过编程获得这两种颜色中间色的方法。我称之为“中间色”的颜色是在中间与这两种颜色相交的颜色
我需要这个,以便分两步绘制渐变:
- 1从第一种颜色到中间带的渐变
- 1从中间色到第二种颜色的渐变
我如何才能做到这一点?您可以尝试以下方法:
new ArgbEvaluator().evaluate(0.5, 0xffffff, 0x000000);
更多信息:
:我将分别处理每个RGB组件。可以使用将十六进制解析为数字。求两个值的平均值(根据需要舍入),然后使用两位数的填充返回十六进制 我没有测试过的一些示例代码:
String colour1 = "#FFFFFF";
String colour2 = "#000000";
StringBuilder result = new StringBuilder("#");
for (int i=0;i<3;i++) {
String h1 = colour1.substring(i*2+1, 3+(i*2));
String h2 = colour2.substring(i*2+1, 3+(i*2));
long l1 = Long.parseLong(h1, 16);
long l2 = Long.parseLong(h2, 16);
long mid = (l1 + l2) / 2; //truncating not rounding
String midStr = Long.toString(mid, 16);
if (midStr.length() == 1) {
result.append("0");
}
result.append(midStr.toUpperCase());
}
String color1=“#FFFFFF”;
字符串color2=“#000000”;
StringBuilder结果=新的StringBuilder(“#”);
对于(inti=0;iWhy你不能分别平均这三个分量吗?你应该指定“中值”的含义。但我认为它只是每个RGB分量的平均值,对吗?颜色可以分为(R,G,B)或(H,S,V)然后你可以取单组分方面的中值。代替简单的平均值,你可以做一个“gamma”校正,但在这里是不必要的。Color.getRed()/Green/Blue,新颜色(r,g,b)
。很好。我只是想知道为什么它会接受对象
,并且在文档中要求32位int值
。这至少需要API-11
argbeevaluator
只是一个线性插值器