我有一系列元素,每个元素都有自己的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");
}
然而,这会产生许多相同颜色的复发。
有什么建议吗?
答案 0 :(得分:1)
好的,颜色可以从000000
(黑色)到ffffff
(白色),所以16777215个不同的值。
我们假设您需要映射[0,2147483647]范围内的int(0到Int.MAX)
到颜色范围[0,16777215]。
第一个问题:如果您同时拥有16777217个或更多元素,则会重复某些颜色。如果您有16777216个或更少的元素,则可以为每个ID映射不同的颜色。
如果你事先知道元素的数量(例如#ID
= 100),你可以这样开始:
col0
(颜色如果ID0
)可能是(16777215 / #ID
)* 0 col1
(ID1
的颜色)可能是(16777215 / #ID
)* 1 col2
(ID2
的颜色)可能是(16777215 / #ID
)* 2 等等,以保证相邻颜色之间可能存在的最大差异。
如果您事先不知道元素的数量,可以将colorJump
定义为使两种颜色与您的眼睛不同的最小增量。就这样
col0
(颜色,如果ID0
)可能为0 col1
(ID1
的颜色)可以是col0
+ colorJump
col2
(ID2
的颜色)可以是col1
+ colorJump
等等