动态地对数字进行颜色编码
本文关键字:颜色 编码 数字 动态 | 更新日期: 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
)*0col1
(ID1
的颜色)可以是(16777215/#ID
)*1col2
(ID2
的颜色)可以是(16777215/#ID
)*2
以保证相邻颜色之间的最大可能差异。
如果你事先不知道元素的数量,你可以将colorJump
定义为使两种颜色与你的眼睛不同的最小增量。这样
col0
(如果ID0
则为彩色)可以为0col1
(ID1
的颜色)可以是col0
+colorJump
col2
(ID2
的颜色)可以是col1
+colorJump
依此类推