Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.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 获取两种颜色之间的中间色_Java_Android_Colors_Gradient_Median - Fatal编程技术网

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
只是一个线性插值器