SolidBrush Color, возвращаемый только в оттенках серого - PullRequest
2 голосов
/ 26 мая 2010

Следующий фрагмент кода возвращается только в оттенках серого. Я был обеспокоен этим в течение большей части дня. Есть мысли о причине?

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 ]

4 голосов
/ 26 мая 2010

Вы каждый раз инициализируете новый Случайный объект. Поскольку оно использует текущее время по умолчанию в качестве начального числа, и вы вызываете его так быстро, что время не меняется (в Windows точность таймера составляет около 15 миллисекунд), вы всегда получаете одно и то же случайное число. Вместо этого создайте статический объект Random в вашем классе.

РЕДАКТИРОВАТЬ: Кроме того, рассмотрите возможность сделать ваш метод RandomNumber также статическим, или поместите его (вместе со статическим объектом Random) в статический класс.

2 голосов
/ 26 мая 2010

Ваши звонки на RandomNumber происходят так быстро, что ГСЧ засевается с одинаковым значением, поэтому вы получаете одно и то же целое число для каждого вызова ... это означает, что все ваши цвета будут иметь одинаковые R, Gи значения B (т. е. оттенки серого).

Переместите объект Random за пределы метода в статический член:

static Random rng = new Random();

private int RandomNumber(int max)
{
   return rng.Next(max);
}
1 голос
/ 26 мая 2010

Попробуйте сделать ваш экземпляр Random статическим членом. Я сталкивался с такими же проблемами раньше, когда random.Next(...) не возвращал ожидаемые значения, и это решило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...