动态地对数字进行颜色编码

本文关键字:颜色 编码 数字 动态 | 更新日期: 2023-09-27 18:26:20

我有一系列元素,每个元素都有自己的ID。ID从1…n开始运行。我希望所有共享ID的元素都以相同的颜色显示。

我知道我可以为每个数字定义一个颜色数组,但这是静态的,我真的不知道我会有多少个数字。

到目前为止,我已经这样做了:

private object getIntColorString(int IDNum)
{
    return IDNum.ToString("X6");
}

但我没有想清楚,因为颜色之间的差异太小了。所以我做了这个:

private object getIntColorString(int eventTrainingProgramID)
{
    int colorCode = eventTrainingProgramID * 100; 
    return colorCode.ToString("X6");
}

然而,这会产生许多相同颜色的重复出现。

有什么建议吗?

动态地对数字进行颜色编码

好的,颜色可以从000000(黑色)到ffffff(白色),所以16777215个不同的值。让我们假设您需要映射范围[021747483647](0到int.MAX)中的int颜色范围[016777215]。

第一个问题:如果一次有16777217个或多个元素,某些颜色将被重复。如果你有16777216个或更少的元素,你可以为每个ID映射不同的颜色。

如果你事先知道元素的数量(例如#ID=100),你可以这样开始:

  • col0(如果是ID0则为彩色)可以是(16777215/#ID)*0
  • col1ID1的颜色)可以是(16777215/#ID)*1
  • col2ID2的颜色)可以是(16777215/#ID)*2

以保证相邻颜色之间的最大可能差异。

如果你事先不知道元素的数量,你可以将colorJump定义为使两种颜色与你的眼睛不同的最小增量。这样

  • col0(如果ID0则为彩色)可以为0
  • col1ID1的颜色)可以是col0+colorJump
  • col2ID2的颜色)可以是col1+colorJump

依此类推