Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.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_Colors_Pixel_Pixels - Fatal编程技术网

比较像素颜色-Java

比较像素颜色-Java,java,colors,pixel,pixels,Java,Colors,Pixel,Pixels,如何使用彩色对象找到类似的彩色像素?我知道两种颜色是否相等,您可以使用: a、 等于(b) 其中a和b是颜色对象,但如果我想找到类似的蓝色阴影,例如呢?比较颜色,有各种不同的度量。我找不到一个图书馆(很容易)能做到这一点,但如果你仔细搜索,我肯定会找到一些东西的。同时 例如,如果我想找到类似深浅的蓝色,该怎么办 我不知道这个技术定义可能意味着什么。但是,您可以使用创建自己的定义 基本上,我想你可以先确定每种颜色的色调是+/-一个固定的度数。然后你可以通过检查饱和度和/或光度是否在你想要的范围内来

如何使用彩色对象找到类似的彩色像素?我知道两种颜色是否相等,您可以使用:

a、 等于(b)

其中a和b是颜色对象,但如果我想找到类似的蓝色阴影,例如呢?

比较颜色,有各种不同的度量。我找不到一个图书馆(很容易)能做到这一点,但如果你仔细搜索,我肯定会找到一些东西的。同时

例如,如果我想找到类似深浅的蓝色,该怎么办

我不知道这个技术定义可能意味着什么。但是,您可以使用创建自己的定义


基本上,我想你可以先确定每种颜色的色调是+/-一个固定的度数。然后你可以通过检查饱和度和/或光度是否在你想要的范围内来进一步缩小范围

以编程方式调整颜色值时,您有很多选择。一个非常简单的解决方案是简单地随机偏移颜色对象的通道值。将其视为变异颜色-只需选择您想要变异的颜色并从中生成更多颜色:

Color mutateColor(int range){
  int r = a.getRed() + (int)(Math.random() * 2 * range - range);
  r = Math.min(255, Math.max(0, r));

  int g = a.getGreen() + (int)(Math.random() * 2 * range - range);
  g = Math.min(255, Math.max(0, g));

  int b = a.getBlue() + (int)(Math.random() * 2 * range - range);
  b = Math.min(255, Math.max(0, b));

  return new Color(r, g, b);
}
这是最简单的示例,给出了一个范围,每个通道都被该范围偏移,结果如下:

这是在范围值为10时完成的。对于添加的控件,可以向mutateColor函数添加三个参数(每个通道的偏移量)。您也可以选择一个范围,但根据通道中已有的值对其进行更改。例如:

range = 0.25
red = 100
green = 10
blue = 0

redRange = 100 + rand(-25, 25)
greenRange = 10 + rand(-2.5, 2.5);
etc...
这只是许多其他可能性之一

如果你想用公差比较两种颜色,我从fredley的链接中移植了代码,它可以很好地获得两种颜色之间的差异:

double colorDist(Color e1, Color e2){
  long rmean = ( (long)e1.getRed() + (long)e2.getRed() ) / 2;
  long r = (long)e1.getRed() - (long)e2.getRed();
  long g = (long)e1.getGreen() - (long)e2.getGreen();
  long b = (long)e1.getBlue() - (long)e2.getBlue();
  return Math.sqrt((((512+rmean)*r*r)>>8) + 4*g*g + (((767-rmean)*b*b)>>8));
}

这个函数可以返回的最大值是什么?快速浏览一下,大约是:764:Math.sqrt(((512+127)*255*255)>>8)+4*255*255+((767-127)*255*255)>>8);