按颜色排序列表(Java)
我希望通过“颜色距离”对列表进行排序。我使用以下函数计算两种颜色之间的距离:按颜色排序列表(Java),java,colors,rgb,hsv,hsl,Java,Colors,Rgb,Hsv,Hsl,我希望通过“颜色距离”对列表进行排序。我使用以下函数计算两种颜色之间的距离: double colorDistance(Color c1, Color c2) { double rmean = (c1.getRed() + c2.getRed()) / 2; int r = c1.getRed() - c2.getRed(); int g = c1.getGreen() - c2.getGreen(); int b = c1.getBlue() - c2.getB
double colorDistance(Color c1, Color c2) {
double rmean = (c1.getRed() + c2.getRed()) / 2;
int r = c1.getRed() - c2.getRed();
int g = c1.getGreen() - c2.getGreen();
int b = c1.getBlue() - c2.getBlue();
double weightR = 2 + rmean / 256;
double weightG = 4.0;
double weightB = 2 + (255 - rmean) / 256;
return Math.sqrt(weightR * r * r + weightG * g * g + weightB * b * b);
}
如你所见,我使用RGB值来计算两种颜色之间的“距离”。这个函数非常适合我需要计算的东西,因为我不需要精确的精度。问题是,我不仅需要知道距离,还需要知道c1是在c2之前还是之后,这样我就可以根据颜色距离创建一个排序列表
如果这还不够清楚,举个例子可能会有所帮助。纯黑色和纯白色之间的色差将在256左右。在当前状态下,此函数将返回相同的~256色距离(黑色,白色)和色距离(白色,黑色)。我怎样才能使colorDistance(黑色,白色)返回256,colorDistance(白色,黑色)返回-256
我不反对使用HSV/HSL,如果这是一种选择,但我更熟悉RGB。如果可以使用HSV/HSL提供计算正色或负色距离的功能,则启用该功能
或者更好的是,另一个简单的函数将采用两种颜色,并简单地决定c1是在c2之前还是之后 如果:
int pixel = (red & 0xFF) << 24 |
(blue & 0xFF) << 16 |
(green & 0xFF) << 8 |
(255 & 0xFF); // 255 is alpha value
int pixel=(red&0xFF)您可以尝试通过将RGB颜色表示为十六进制数来创建一个数组,然后按值对列表进行排序。这不起作用,已经完成了。由于RGB是三个单独的十六进制值的组合,所以十六进制数的顺序将与颜色的正确顺序不一致。谢谢你的帮助!
int pixel = (red & 0xFF) << 16 |
(blue & 0xFF) << 8 |
(green & 0xFF);