C# - 随机颜色生成器无法正常工作

时间:2017-05-28 20:49:35

标签: c# .net random colors

所以我对一个简单的随机颜色生成器类有一点问题,尽管每次应用程序启动时都不会停止生成相同的颜色集。

这是仅在第一次使用时才会发生的问题。 然而 Random对象初始化与第一代通话之间的时间是用户决定。所以我真的不知道是什么导致它

这是我的代码:

        /// <summary>
    /// Random number generator
    /// </summary>
    static Random Random;

    public static void Initialize()
    {
        //Intializes the random number generator
        Random = new Random();
    }

    /// <summary>
    /// Generates a random color
    /// </summary>
    /// <returns></returns>
    public static Color GenerateOne()
    {
        while (true)
        {
            Color clr = Color.FromArgb(RandByte(), RandByte(), RandByte());

            float sat = clr.GetSaturation();

            if (sat > 0.8 || sat < 0.2)
            {
                continue;
            }

            float brgt = clr.GetBrightness();
            if (brgt < 0.2)
            {
                continue;
            }

            return clr;
        }
    }

    /// <summary>
    /// Generates a set of random colors where the colors differ from each other
    /// </summary>
    /// <param name="count">The amount of colors to generate</param>
    /// <returns></returns>
    public static Color[] GenerateMany(int count)
    {
        Color[] _ = new Color[count];

        for (int i = 0; i < count; i++)
        {
            while (true)
            {
                Color clr = GenerateOne();

                float hue = clr.GetHue();
                foreach (Color o in _)
                {
                    float localHue = o.GetHue();

                    if (hue > localHue - 10 && hue < localHue + 10)
                    {
                        continue;
                    }
                }

                _[i] = clr;
                break;
            }
        }

        return _;

    }

    /// <summary>
    /// Returns a random number between 0 and 255
    /// </summary>
    /// <returns></returns>
    static int RandByte()
    {
        return Random.Next(0x100);
    }
}

Screenshot of repeating color scheme if needed

提前致谢:)

1 个答案:

答案 0 :(得分:0)

抱歉浪费你的时间。 原来它不是发电机故障,它是使用它的自定义控制。 基本上,自定义控件将其颜色集存储在由表单设计器代码覆盖的属性中(生成在InitializeComponent()之前的属性初始化期间发生)。 它本质上只是一个[Bindable(false)]属性。

所以是的...无论如何,谢谢你的建议:)