2017-04-04 47 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没有尝试创建那么多笔,我会感到惊讶)。

获取所有预定义的笔将不会获得所有可能的笔。