2011-07-08 45 views
5

我知道如何得到一個隨機的UIColor,但我想知道是否存在一種方式來返回具有某種特定質量的顏色。我不知道是否存在一個特定的術語,但是例如,我需要獲得不透明的顏色,深色調......顏色,這對背景有明顯的文字/圖像很好。如何得到一個隨機的UIColor,但限制它的顏色的子集

我可以手工挑選一些,但在我的情況下,我想爲大量圖標背景提供一個很好的默認值。

更新:根據這裏的答案

我的解決辦法:

float r = arc4random() % 12; 

return [UIColor colorWithHue:(30*r)/360 saturation:0.5f brightness:0.8f alpha:1.0f]; 

我得到的可能答案的一個非常小的名單,但是這給了我一個良好的開端。

回答

1

我會做的是使用HSV/HSL色彩空間,然後將結果轉換爲RGB。保持您喜歡的品質的恆定值和飽和度(S和V),然後更改所需顏色數量的色調(H)值。將結果轉換爲RGB,並且您將擁有一組看起來很好地協同工作的顏色。您可以創建任何一組「漂亮」,「明亮」,「黑暗」等漂亮顏色,只需根據您的需要選擇S和V的完美組合(低V暗,高V明亮,低S不飽和,高S飽和)。

查看this wiki page瞭解有關將HSV轉換爲RGB的討論。我建議你從0.5開始飽和(S),0.8開始(V)。然後,爲了產生漂亮的顏色,對H值0,30,60,90 ...一直到360,進行HSV→RGB轉換。它將生成很好的調色板,它們看起來很好。稍後,如果您需要不同顏色的「品質」,則可以調整S和V值。

+0

好吧,我沒有太多的圖形經驗,所以你說我得到一個手動列表,然後改變它的S&V? – mamcx

+0

@mamcx我添加了一個相關的維基鏈接來描述從HSV到RGB的轉換 – aardvarkk

+1

我仍然不明白爲什麼我需要轉換爲RGB,我這樣做:float r = arc4random()% 12; return [UIColor colorWithHue:(30 * r)/ 360飽和度:0.5f亮度:0.8f alpha:1.0f]; – mamcx

1

使用隨機顏色作爲背景確實是次優解決方案,因爲這會導致圖標文本和信息的可見性和可讀性問題。有一些研究正在自動找到與您的前景色相匹配的適當顏色,從而導致圖像視覺感知的諧波結果。看看http://cs.nyu.edu/~sorkine/ProjectPages/Harmonization/

+0

這是一個非常整潔的項目! – aardvarkk

+0

是的。這對於爲已經存在的前景創建一個很好的匹配背景特別有用。它會使圖像顯得和諧。 – KillerInsect

+0

「訪問被禁止!」 :( – steipete