按颜色排序列表(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);