2012-02-13 66 views
3

我需要通过时间表示一系列元素。出于设计目的,它们中的每一个都应该有一个颜色,以便一目了然地识别每一个颜色。重点在于,如果它们之间的颜色差异不被人类所感知,那么每个元素的颜色都是没有意义的。Java中颜色的哈希函数

元素唯一固定的属性是他们的ID。这个ID被认为是从一个元素到另一个元素的差异,但这不是确定的。

我所寻找的是一个哈希函数,它基于数字ID返回十六进制颜色(网络格式,例如#f62035),其很多与以前的ID和下一个ID。此外,因为显示元素的背景是黑色,所以HEX颜色不能太暗。


例子:

Element ID: 12 
Element ID: 13 

hash(12) = #f46600 
hash(13) = #5aa9aa 
+0

您可能能够调整这个解决方案创建的列表:HTTP: //stackoverflow.com/questions/4246351/creating-random-colour-in-java – 2012-02-13 09:30:23

+0

@JonLin这是我的最后一个选择,因为颜色不能保存到数据库,它应该是不同的执行中相同的颜色,但谢谢;) – eversor 2012-02-13 09:33:25

+1

@eversor你可以通过在构造Random时使用已知的种子(比如12345L)来避免这样的问题。然后,如果您按照相同的顺序执行(完全)相同的操作,则会得到相同的结果。 – 2012-02-13 09:37:44

回答

2

恕我直言,和depeding你要多少不同颜色的需要,我想你最好的解决办法是建立的颜色使用的列表,说100种不同颜色的变化以及按照您要使用它们的顺序对它们进行排序,然后您可以将这些颜色作为颜色使用,方法是按顺序从列表中分配这些颜色,当您到达列表末尾时,可以重新开始。

该解决方案不具有可扩展性,但您必须记住,只有很少几种颜色可以让人看出它们的不同并适合您的设计。

要创建此列表,也许你可以编写swhows拾色器不同的Java应用程序,所以你可以选择颜色和代码,您

+2

你可以把它变成确切的解决方案。构建一个颜色列表(可以是手动的,也可以是伪随机的),并使用(传统哈希代码)mod(列表的长度)从列表中选择一种颜色。 – 2012-02-13 10:34:10