我正在开发一个生成Mandelbrot集表示的应用程序。我已经开始工作了,看下面的图片,很酷的东西!
对于我正在使用这样的数组的颜色:
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);
这给了我正确的颜色(你可以反复看到颜色模式重复)
我想为我的代码添加更宽的颜色调色板,并使用全部 Brushes
和Pens
可用。
但是,当我们查看Pens文档(https://msdn.microsoft.com/en-us/library/system.drawing.pens(v=vs.110).aspx)时,您可以看到Pens类仅包含属性。
如何获得所有这些笔的数组,而不需要自己逐个颜色声明?这将占用大量的代码,在我看来,它似乎更容易完成。谢谢!
答案 0 :(得分:1)
正如@stuartd所提到的,你会想要使用Reflection来获取这些。
var pens = typeof(Pens).GetProperties(BindingFlags.Static | BindingFlags.Public)
.Select(p => p.GetValue(null))
.OfType<System.Drawing.Pen>()
.ToArray();
上面的代码会返回一个Pen数组。请注意,您还可以获得Transparent
,您可能希望保留或删除。
如果你交换Pen for Brush,上面的代码就可以了。
答案 1 :(得分:1)
你似乎对事情的运作方式存在误解。
是的,有一堆预定义的笔通常会避免程序必须创建&amp;摧毁钢笔。但是,您可以制作任何颜色的笔,而不仅仅是已定义的笔。因此,有1600万个可能的笔(尽管如果Windows没有尝试创建那么多笔,我会感到惊讶。)
获得所有预定义的笔不会获得所有可能的笔。