2013-03-20 89 views
2

我正在遍歷多邊形標誌。我有128個獨特的tham。我想知道如何獲得每種顏色(這樣每個國旗會有或多或少的顏色)?如何從一個int獲得這樣的RGB整數?如何生成128個不同的RGB顏色(int,int,int)?

擁有一個像rand()%255, rand()%255, rand()%255這樣的基於框架的模型的東西並沒有什麼意義,而每個可見的商店顏色並不是我想要的。 255-i變體不會提供可預料的結果。所以我尋求一種算法來從給定的i獲得可變色的顏色。

我有一個迭代器iunsigned long long 128位掩碼(0001,0010,0100 ...)。

+1

128種顏色的眼睛區分?當您將兩種不同的顏色並排放置時,您可能可以做到這一點,但是當按順序呈現而不是同時呈現時,您可能無法區分出兩種不同的藍色。 – 2013-03-20 08:19:18

回答

1

這取決於你想要如何截然不同。

如果您發現在運行時創建顏色太困難,那麼如何在托盤中創建預定義顏色的查找,您知道它們是不同的?

+0

這是主要問題 - 不錯的漸變不是我所需要的,我需要在第一和第二和thisd之間的可呈現的顏色......以及最後的顏色......儘可能多。 – DuckQueen 2013-03-20 08:23:38

+0

@DuckQueen更新回答 – rhughes 2013-03-20 08:26:07

+0

@DuckQueen再次更新答案 – rhughes 2013-03-20 08:28:38

3

128位數字是7位數據。我將7位分成(2,2,3),並將這些(按某種順序)用作紅色,綠色和藍色的高位。這應該儘可能在RGB顏色空間中分散顏色。

+8

AFAIK,人眼對綠色最爲敏感。因此,我寧願選擇(2,3,2)(2,2,3)(如果這是RGB)。 – Spook 2013-03-20 08:22:27

+0

事實上,我有一個迭代器'我'也是一個'無符號長長面具。 – DuckQueen 2013-03-20 08:25:25

+0

@Spook - 感知距離的好處。我的「按某種順序」的括號是因爲我不確定哪種顏色應該得到三位。綠色似乎是最好的選擇。 – 2013-03-20 08:29:56

1

生成最佳顏色的調色板並不容易。既然你說你需要的顏色一個固定的號碼,你可以只預生成一個,比如這裏:

http://tools.medialab.sciences-po.fr/iwanthue/

+0

該頁面確認了我對可區分性的擔憂。如果可能的話,我會將這些信息的一部分編碼成這128個獨特多邊形的形狀或大小,或者使用一組圖案(圖片)而不是純色。說,12種圖案+ 12種不同的顏色,這是144個獨特的組合。或者使用兩種顏色的一種非對稱圖案,每種顏色均來自一組12個(黑色+白色,黑色+黃色,紅色+白色,藍色+黃色等)。 – 2013-03-20 09:54:02

1

如果你真的需要生成這些,而不是使用預先生成的調色板,我至少會建議不要在RGB中工作。

例如,Lab色彩空間與人類視覺系統更密切相關,因此在嘗試尋找感知不同的色彩時可能更合適。

因此,您可能會嘗試生成在Lab中相距甚遠的顏色,然後再轉換回RGB。

2

簡單地使用網格r = 4,g = 8,b = 4很容易,但不一定會生成最佳輸出,因爲暗色中應該有較少不同的色調。

實驗室空間中的處理在每個單元之間的感知距離是最相等的,但我相信可以從YUV或HSV中找到合理的選擇。

只是從評估其他答案的啓發式/結果(我會盡力找到最好的duplicate from gamedeveloper網站),我認爲最好的結果是其他格子比立方體。

X X X 
X X X X <-- e.g. sampling points from hexagonical grid in HSV cone 
    X x X for some intensity level L. 
X X X X 
    X X X 

典型錯誤 IMO,是使一個新的水平L + -1同樣爲L;相反,如果下一個強度等級L + -1中的採樣點被旋轉(45度),那麼附近顏色的色調和強度都會有所不同。這個想法的另一個名字是給好的海明距離到附近的顏色。

 x x L&1==0, x L&1==1 
     *    x x 
    x x    x 
在HSV錐體

另外會有一個黑,一個白,暗顏色的三個色調,在明亮的顏色的三個色調,6或在接下來的強度水平等

第二12種顏色遊戲開發者回答中出色的評論是文化偏見。因爲我們給的含義賦予某些顏色,可以在從橄欖,或薰衣草紫紅色區分聖人的顏色非常好,我將陳述的概念,而。

編輯該鏈接的第一個答案有173個迴應,即使例如,我無法區分顏色5和6.並且只有10種顏色。但該理論聲稱是合理的。

0

這個怎麼樣:

int get_red(int rep){ 
    int x,r=0,i,temp; 
    i=0; 
    temp=rep; 
    while(temp!=0){ 
     i++; 
     if(i==3) r=temp%2; 
     temp=temp/2; 
    } 
    if(i>3) x=(long long int)255/(i-2); 
    else x=255; 
    temp=r*x; 
    return temp; 

} 

int get_green(int rep){ 
    int x,g=0,i,temp; 
    i=0; 
    temp=rep; 
    while(temp!=0){ 
     i++; 
     if(i==2) g=temp%2; 
     temp=temp/2; 
    } 
    if(i>3) x=(long long int)255/(i-2); 
    else x=255; 
    temp=g*x; 
    return temp; 
} 

int get_blue(int rep){ 
    long long int x,b=0,i,temp; 
    i=0; 
    temp=rep; 
    while(temp!=0){ 
     i++; 
     if(i==1) b=temp%2; 
     temp=temp/2; 
    } 
    if(i>3) x=(int)255/(i-2); 
    else x=255; 
    temp=b*x; 
    return temp; 
} 
相關問題