Grapeoff
@Grapeoff
В чём концепция...?

Проблема в «нерандомности» рандома или ошибка в реализации?

У меня есть функция, которая закрашивает рандомные пиксели на фото в зависимости от указанной степени "порчи" фото.

public Bitmap Break(float ratio)
        {
            if (ratio < 0 || ratio > 1)
            {
                throw new ArgumentException("Ratio must be in range 0..1");
            }
            
            var bitmap = new Bitmap(_path);
            
            var width = bitmap.Size.Width;
            var height = bitmap.Size.Height;

            var pixelsToBrake = Math.Floor(width * height * ratio);

            for (int i = 0; i <= pixelsToBrake; i++)
            {
                bitmap.SetPixel(new Random().Next(0, width), new Random().Next(0, height), Color.White);
            }

            return bitmap;
        }

Но результат всегда получается какой-то странный: прослеживается некий приоритет в закрашивании

61803567e73fa675205831.jpeg
Это результат "синтетичности" рандома в C# или я где-то что-то неправильно написал?

Если убрать проверку на ratio и поставить какой-нибудь зверский коэффициент, то результат ещё более видимый

618036cba5a90075584464.jpeg
  • Вопрос задан
  • 122 просмотра
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
В C#, при создании объекта Random без параметра, он инициализируется системным временем, которое имеет конечное разрешение. Если два объекта созданы с одним значением инициализатора, то они будут выдавать одинаковую последовательность.
В вашем случае надо один раз до цикла создавать объект Random, а в цикле только вызывать его метод Next.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы