SolidBrush颜色仅以灰度返回

时间:2010-05-25 20:40:52

标签: c# colors

以下代码段仅以灰度返回。我大部分时间都对此感到不安。有什么想法吗?

using System.Drawing;
    private Graphics _g;

    public Form1()
    {
      InitializeComponent();
      _g = pictureBox1.CreateGraphics();
    }

    private void x()
    {
      System.Drawing.Rectangle r = CreateCircle(e);
      SolidBrush brsh = ChooseFillColor();
      _g.FillEllipse(brsh, r);
    }
    private SolidBrush ChooseFillColor()
    {
      return new SolidBrush(Color.FromArgb(RandomNumber(255), RandomNumber(255), RandomNumber(255)));
    }
    private int RandomNumber(int max)
    {
      Random random = new Random();
      return random.Next(max);
    }

3 个答案:

答案 0 :(得分:4)

每次都初始化一个新的Random对象。由于它默认使用当前时间作为其种子,并且您调用它以使时间不会改变(在Windows上,计时器的准确度大约为15毫秒),您总是得到相同的随机数。而是在类中创建一个静态Random对象。

编辑:另外,考虑将RandomNumber方法设置为静态,或将其(与静态Random对象一起)放在静态类中。

答案 1 :(得分:2)

您对RandomNumber的调用发生得如此之快,以至于RNG的播种次数相同,因此您为每次调用获得相同的整数...这意味着您的所有颜色都将具有相同的R ,G和B值(即灰度)。

将方法外的Random对象移动到静态成员中:

static Random rng = new Random();

private int RandomNumber(int max)
{
   return rng.Next(max);
}

答案 2 :(得分:1)

尝试将Random的实例设为静态成员。在random.Next(...)未返回预期值之前,我遇到了同样的问题,这解决了问题。