色彩逻辑算法

2022-09-01 16:24:53

我们正在构建一个体育应用程序,并希望将团队颜色合并到应用程序的各个部分。

现在,每个团队都可以使用几种不同的颜色来表示。

我想做的是执行检查以验证两个团队颜色是否在彼此的一定范围内,这样我就不会显示两个相似的颜色。

因此,如果团队 1 的主要团队颜色值为 rgb(255,0,0)(或#FF0000),并且团队 2 的原色相似,比如 rgb(250,0,0),那么我们将为其中一个团队选择不同的颜色。

如果可能的话,我可以采取什么方法来执行检查?

谢谢


答案 1

这是一个理论解释

C中的算法:

typedef struct {
    unsigned char r, g, b;
} RGB;

double ColourDistance(RGB e1, RGB e2)
{
    long rmean = ( (long)e1.r + (long)e2.r ) / 2;
    long r = (long)e1.r - (long)e2.r;
    long g = (long)e1.g - (long)e2.g;
    long b = (long)e1.b - (long)e2.b;
    return sqrt((((512+rmean)*r*r)>>8) + 4*g*g + (((767-rmean)*b*b)>>8));
}

答案 2

这是pgras在Java中的算法:

public double ColourDistance(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);
}