2017-04-04 27 views
0

我正在處理一個生成Mandelbrot集的表示的應用程序。我已經準備好了,看下面的圖片,非常酷的東西!如何獲取所有筆和筆刷的數組?

enter image description here

對於顏色我使用數組是這樣的:

Pen[] pens = { 
    Pens.Red, 
    Pens.Green, 
    Pens.Blue, 
    Pens.Cyan, 
    Pens.Magenta, 
    Pens.Yellow 
}; 

而且在我的代碼我使用這個數組來填充使用下面的代碼片斷像素:

while(iteration > 6) 
{ 
    iteration -= 6; 
} 

graphics.DrawRectangle(pens[iteration-1], rectangle); 

這給了我正確的顏色(你可以看到顏色百通重複一遍又一遍)

我想給我的代碼更廣泛的顏色調色板,並利用所有BrushesPens可用。

但是,當我們查看筆文檔(https://msdn.microsoft.com/en-us/library/system.drawing.pens(v=vs.110).aspx)時,可以看到筆類僅包含屬性。

如何獲得所有這些鋼筆的數組,而無需根據顏色自行聲明?這會佔用大量的代碼,在我看來,它似乎可以輕鬆完成。謝謝!

+3

以'typeof(System.Drawing.Pens).GetProperties()' – stuartd

+0

開頭對於__really__酷色,忘記現成的筆/筆刷並使用您自己的!您可以從任何您喜歡的Colr或使用Color.FromArgb進行計算來創建它們;或者在這種情況下將它們緩存在列表中或列表 TaW

+0

請參閱[這裏](http://stackoverflow.com/questions/34481172/drawing-a-matrix-with-a-gradient-of-colors-spectrogram/34481807 #34481807)的功能,從幾個停止的顏色創建一個不錯的漸變!然後,您可以從顏色列表中選擇一個並隨時創建Pen = newPen(colorList [index])或緩存一組筆。 – TaW

回答

1

正如@stuartd提到的,你會想用反射來獲得這些。

var pens = typeof(Pens).GetProperties(BindingFlags.Static | BindingFlags.Public) 
         .Select(p => p.GetValue(null)) 
         .OfType<System.Drawing.Pen>() 
         .ToArray(); 

上述代碼將返回一個Pen數組。請記住,您還可以獲得Transparent,您可能想要保留或刪除它。

上面的相同代碼將工作,如果您交換筆刷。

1

您似乎對事物的工作方式存在誤解。

是的,有一堆預定義的鋼筆,它們通常會避免程序必須創建銷燬鋼筆&。但是,您可以製作任何顏色的筆,而不僅限於定義的筆。因此,有1600萬筆可能的筆(儘管如果Windows沒有嘗試創建那麼多筆,我會感到驚訝)。

獲取所有預定義的筆將不會獲得所有可能的筆。