2015-09-11 21 views
1

我有這樣一組數字:如何生成號的顏色,其中關閉數量具有對比色

 
11341 
11341 
11342 
11342 
11343 
11344 
11344 
... 
50001 
50001 
50002 
... 

我希望能夠根據每個獨特號生成顏色,這樣的數字併攏有鮮明的對比色。

概念:這些數字中的每一個對應於一個會話ID,我希望每個會話都有顏色編碼,但靠近在一起的會話不應具有相似的顏色。

我試過了關於here寫的概念,它的工作原理,除非接近的數字趨於具有相似的顏色。

想法?

回答

1

我喜歡Antoine Lefebvre的回答,但是您仍然有兩個不對比的顏色彼此靠近的問題(比如說因爲長時間的會話,所有它的鄰居會話都會出現)。

- 這不是我在寫這個問題時考慮的事情,但我發現這是一個需要考慮的真正問題。

我最終選擇的解決方案是創建最大對比度調色板,然後使用session_id訪問該調色板。

我看了看這個調色板: Kelly's 22 Colours of Maximum contrast [編者注:URL改變]

我喜歡它了很多,因爲它需要色盲考慮。但是22種顏色的限制對我來說還不夠。

所以我最終使用這個調色板:A color dictionary of 269 maximally distinct colors from all previous colors

這裏是我的解決方案(使用CPP和QT寫的):

QColor colorForIndex(int index) 
{ 
    static QStringList colorList = QStringList() 
     << "#000000" << "#FFFF00" << "#1CE6FF" << "#FF34FF" << "#FF4A46" << "#008941" << "#006FA6" << "#A30059" << "#FFDBE5" << "#7A4900" 
     << "#0000A6" << "#63FFAC" << "#B79762" << "#004D43" << "#8FB0FF" << "#997D87" << "#5A0007" << "#809693" << "#FEFFE6" << "#1B4400" 
     << "#4FC601" << "#3B5DFF" << "#4A3B53" << "#FF2F80" << "#61615A" << "#BA0900" << "#6B7900" << "#00C2A0" << "#FFAA92" << "#FF90C9" 
     << "#B903AA" << "#D16100" << "#DDEFFF" << "#000035" << "#7B4F4B" << "#A1C299" << "#300018" << "#0AA6D8" << "#013349" << "#00846F" 
     << "#372101" << "#FFB500" << "#C2FFED" << "#A079BF" << "#CC0744" << "#C0B9B2" << "#C2FF99" << "#001E09" << "#00489C" << "#6F0062" 
     << "#0CBD66" << "#EEC3FF" << "#456D75" << "#B77B68" << "#7A87A1" << "#788D66" << "#885578" << "#FAD09F" << "#FF8A9A" << "#D157A0" 
     << "#BEC459" << "#456648" << "#0086ED" << "#886F4C" << "#34362D" << "#B4A8BD" << "#00A6AA" << "#452C2C" << "#636375" << "#A3C8C9" 
     << "#FF913F" << "#938A81" << "#575329" << "#00FECF" << "#B05B6F" << "#8CD0FF" << "#3B9700" << "#04F757" << "#C8A1A1" << "#1E6E00" 
     << "#7900D7" << "#A77500" << "#6367A9" << "#A05837" << "#6B002C" << "#772600" << "#D790FF" << "#9B9700" << "#549E79" << "#FFF69F" 
     << "#201625" << "#72418F" << "#BC23FF" << "#99ADC0" << "#3A2465" << "#922329" << "#5B4534" << "#FDE8DC" << "#404E55" << "#0089A3" 
     << "#CB7E98" << "#A4E804" << "#324E72" << "#6A3A4C" << "#83AB58" << "#001C1E" << "#D1F7CE" << "#004B28" << "#C8D0F6" << "#A3A489" 
     << "#806C66" << "#222800" << "#BF5650" << "#E83000" << "#66796D" << "#DA007C" << "#FF1A59" << "#8ADBB4" << "#1E0200" << "#5B4E51" 
     << "#C895C5" << "#320033" << "#FF6832" << "#66E1D3" << "#CFCDAC" << "#D0AC94" << "#7ED379" << "#012C58" << "#7A7BFF" << "#D68E01" 
     << "#353339" << "#78AFA1" << "#FEB2C6" << "#75797C" << "#837393" << "#943A4D" << "#B5F4FF" << "#D2DCD5" << "#9556BD" << "#6A714A" 
     << "#001325" << "#02525F" << "#0AA3F7" << "#E98176" << "#DBD5DD" << "#5EBCD1" << "#3D4F44" << "#7E6405" << "#02684E" << "#962B75" 
     << "#8D8546" << "#9695C5" << "#E773CE" << "#D86A78" << "#3E89BE" << "#CA834E" << "#518A87" << "#5B113C" << "#55813B" << "#E704C4" 
     << "#00005F" << "#A97399" << "#4B8160" << "#59738A" << "#FF5DA7" << "#F7C9BF" << "#643127" << "#513A01" << "#6B94AA" << "#51A058" 
     << "#A45B02" << "#1D1702" << "#E20027" << "#E7AB63" << "#4C6001" << "#9C6966" << "#64547B" << "#97979E" << "#006A66" << "#391406" 
     << "#F4D749" << "#0045D2" << "#006C31" << "#DDB6D0" << "#7C6571" << "#9FB2A4" << "#00D891" << "#15A08A" << "#BC65E9" << "#FFFFFE" 
     << "#C6DC99" << "#203B3C" << "#671190" << "#6B3A64" << "#F5E1FF" << "#FFA0F2" << "#CCAA35" << "#374527" << "#8BB400" << "#797868" 
     << "#C6005A" << "#3B000A" << "#C86240" << "#29607C" << "#402334" << "#7D5A44" << "#CCB87C" << "#B88183" << "#AA5199" << "#B5D6C3" 
     << "#A38469" << "#9F94F0" << "#A74571" << "#B894A6" << "#71BB8C" << "#00B433" << "#789EC9" << "#6D80BA" << "#953F00" << "#5EFF03" 
     << "#E4FFFC" << "#1BE177" << "#BCB1E5" << "#76912F" << "#003109" << "#0060CD" << "#D20096" << "#895563" << "#29201D" << "#5B3213" 
     << "#A76F42" << "#89412E" << "#1A3A2A" << "#494B5A" << "#A88C85" << "#F4ABAA" << "#A3F3AB" << "#00C6C8" << "#EA8B66" << "#958A9F" 
     << "#BDC9D2" << "#9FA064" << "#BE4700" << "#658188" << "#83A485" << "#453C23" << "#47675D" << "#3A3F00" << "#061203" << "#DFFB71" 
     << "#868E7E" << "#98D058" << "#6C8F7D" << "#D7BFC2" << "#3C3E6E" << "#D83D66" << "#2F5D9B" << "#6C5E46" << "#D25B88" << "#5B656C" 
     << "#00B57F" << "#545C46" << "#866097" << "#365D25" << "#252F99" << "#00CCFF" << "#674E60" << "#FC009C" << "#92896B"; 

    int colorIndex = index % colorList.size(); 
    return QColor(colorList.value(colorIndex, "white")); 
} 
0

您可以根據會話ID計算RGB顏色代碼。 要具有對比顏色,只是計算會話ID MOD 3,並基於該值(0,1或2)改變爲分配R,G的邏輯,B值

實施例:

switch(session_id mod 3){ 
case 0: R = session_id mod 256; G = (session_id/256) mod 256;B = (session_id/65536) mod 256; 
case 1: G = session_id mod 256; B = (session_id/256) mod 256;R = (session_id/65536) mod 256; 
case 2: B = session_id mod 256; R = (session_id/256) mod 256;G = (session_id/65536) mod 256; 

當然你可以調整公式來計算RGB值。