2012-02-13 58 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