2011-09-24 73 views
2

我想在後面的代碼中生成WPF中12種不同的可見畫筆顏色,最初12種顏色的數量可能會隨着應用程序的演變,即我想要根據給定的計數生成儘可能多的不同可見刷子顏色?如何在運行時生成12種不同的畫筆顏色(12是一個可能有所不同的數字)

我會解釋這多一點:

我在創建矩形for循環和在運行時創建的每一個矩形我已經指定填充顏色例如

for (i=0; i<12; i++) 
    { 
     Rectangle rect = new Rectangle(); 
     rect.Fill = <I want to assign a unique visible color>; 
     rect.Stroke = Brushes.Black; 
     rect.StrokeThickness = 1; 
    } 

回答

1

您可能需要的是RGB到HSL以及HSL到RGB轉換器。然後,您可以將總色調(通常用圓圈表示度數,但有時用百分比值表示)除以所需顏色的數量。按照線段數量增加色相值應該產生可能差異最大的顏色。

大多數示例都使用WinForms Color對象,因爲它能夠提供H S和L值。有很多網上的例子:

http://www.bobpowell.net/RGBHSB.htm

how to use HSL in Asp.net

0

刷可分配的顏色,This SO question應該可以幫助您獲得的顏色,然後在每次創建任意數量的刷子的新刷的時間進行分配。

僅供參考:

Brush Class

Brushes class

+1

感謝SpeedBirdNine..I增加了一個for循環例子更清楚地解釋我的問題.. !! – VS1

0

使用隨機數生成器創建RGB三合一的顏色。將它保存在一個列表中。然後下一次循環檢查列表中新生成的顏色。如果它不在列表中,請使用它,如果它再次選擇。

如果你有很多顏色可能會遇到麻煩,所以你越來越有可能擊中現有的顏色,但對於12(或左右)的顏色,它應該沒問題。

或者,創建一個100個顏色的列表,並在隨機選取時從列表中刪除每個顏色。這將確保您不會發生任何衝突,但如果您需要更多顏色,則需要擴展列表。

+0

我認爲這種方法存在的一個問題是,兩種顏色可能有略微不同的RGB值,但仍然看起來與人類完全一樣。 – svick

+0

ChrisF,我認爲替代方法更好,而不是隻加載100種顏色,使用反射或類似的方法加載所有可用的顏色,每種顏色分配一個唯一索引,然後在訪問時我們可以給索引並獲取顏色。 Howz,這是一個好的解決方案? – VS1

+0

@svick - 同意。我認爲你需要使用一些「鄰近」的顏色算法。 – ChrisF

相關問題