【问题标题】:Determine color based on similarity of hexadecimal string / binary number根据十六进制字符串/二进制数的相似度确定颜色
【发布时间】:2022-01-05 03:42:17
【问题描述】:

这看起来是个奇怪的问题。

我在 youtube 视频中遇到过它,其中对象具有字符串属性。 对象的图形表示根据字符串的相似性进行着色。

字符串被定义为二进制数的十六进制表示。例如“915BB352”表示“10010001010110111011001101010010”。

我可以在 C# 中使用什么方法来获得这种行为?

所以“10010001010110111011001101010010”和“10010001010110111011001101010000”应该有相似的颜色。 “10010001010110111011001101010010”和“01100100110001101010100001011111”应该是完全不同的。

【问题讨论】:

  • 这两种颜色怎么一样
  • 这在我看来毫无意义。你指的是什么视频??颜色距离/相似度不是一个定义明确的东西..
  • 我参考了这个视频:youtube.com/watch?v=N3tRFayqVtk。每个“生物”都有一个由字符串表示的基因组。生物的颜色由这些字符串定义,并且随着时间的推移,所有生物的颜色都会对齐。我知道它是一种与 C# 不同的语言,但我想了解它背后的方法。
  • @Shintaro 请标记我的答案。我需要这些积分。

标签: c# binary hex


【解决方案1】:

不要使用十六进制或二进制,而是尝试将十六进制颜色转换为 HSL,然后您可以使用 HSL 来确定差异,只需测量 Hue 中的差异,然后比较 Lightness 和最后 Saturation

Red: hsla(360, 100%, 50%, 1) Blue: hsla(250, 100%, 50%, 1)

区别在于:

(360 - 250), (100% - 100%), ( 50% - %50%), (1-1)

差值等于: = 10, 0, 0, 0

完全不同

定义

HSL(表示色调、饱和度、亮度)和 HSV(表示色调、饱和度、值;也称为 HSB,表示色调、饱和度、亮度)是 RGB 颜色模型的替代表示,由计算机图形学在 1970 年代设计研究人员更紧密地与人类视觉感知色彩属性的方式保持一致。

public static HSLColor FromRGB(Byte R, Byte G, Byte B)
    {
        float _R = (R / 255f);
        float _G = (G / 255f);
        float _B = (B / 255f);

        float _Min = Math.Min(Math.Min(_R, _G), _B);
        float _Max = Math.Max(Math.Max(_R, _G), _B);
        float _Delta = _Max - _Min;

        float H = 0;
        float S = 0;
        float L = (float)((_Max + _Min) / 2.0f);

        if (_Delta != 0)
        {
            if (L < 0.5f)
            {
                S = (float)(_Delta / (_Max + _Min));
            }
            else
            {
                S = (float)(_Delta / (2.0f - _Max - _Min));
            }


            if (_R == _Max)
            {
                H = (_G - _B) / _Delta;
            }
            else if (_G == _Max)
            {
                H = 2f + (_B - _R) / _Delta;
            }
            else if (_B == _Max)
            {
                H = 4f + (_R - _G) / _Delta;
            }
        }

        return new HSLColor(H, S, L);
    }

你可以和HSL Here一起玩

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 2011-03-26
    • 2017-03-22
    • 2016-02-26
    • 2014-04-25
    • 2017-11-19
    • 2012-12-12
    相关资源
    最近更新 更多