我正在寻找按“颜色距离”对列表进行排序。我正在使用以下函数来计算两种颜色之间的距离:
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 附近。在当前状态下,此函数将为 colorDistance(black, white) 和 colorDistance(white, black) 返回相同的 ~256。我怎样才能使 colorDistance(black, white) 返回 256 而 colorDistance(white, black) 返回 -256?
如果可以的话,我不反对使用 HSV/HSL,但我对 RGB 更加熟悉。如果可以提供一个函数来计算 HSV/HSL 的正或负颜色距离,那就把它带上吧!
或者更好的是,另一个简单的函数将采用两种颜色并简单地决定 c1 是在 c2 之前还是之后!