生成独特的颜色

时间:2015-04-16 06:34:34

标签: c# colors

我刚写了一个小类,它产生了完美独特的颜色(或者说这是计划)。我在网上找到了最初的索引转移片段,并且只是想知道它是否可以改进,或者使用它是否会出现任何问题。

这是用于创建独特颜色的类。

public class UniqueColorGenerator
    {
        private int _colorIndex;
        public UniqueColorGenerator()
        {

        }

        public Color Next()
        {
            _colorIndex++;
            byte red = ( byte )( _colorIndex & 0x000000FF );
            byte green = ( byte )( ( _colorIndex & 0x0000FF00 ) >> 08 );
            byte blue = ( byte )( ( _colorIndex & 0x00FF0000 ) >> 16 );
            return Color.FromArgb( red , green , blue );
        }
    }

我正在使用它来进行几何选择"在OpenGL中。它也很漂亮。这是16,384个四边形的图片,它们有自己独特的颜色......或者我想我应该说"独特的红色和黑色色调"。

enter image description here

当我第一次跑它时,我发誓它们是明显重复的。但他们并非如此。采摘工作不仅完美无瑕,而且还经历了色彩并没有发生过一次碰撞。我仍然想知道,如果生成器当前是如何构建的,可能会出现任何问题 - 除了达到整数最大值,这也永远不会发生。

而且,你们是否知道我如何能更多地随机化颜色,所以不是得到不同的红色,我可以在光谱中收到更多的颜色?

2 个答案:

答案 0 :(得分:1)

如果使用HSL颜色模型,可能会有更好的效果。 RGB值可能最终偏向更暗或更浅的颜色。如果您使用HSL(色调,饱和度和光照),则可以将Saturationlight设置为固定值或窄范围值,然后选择随机hue

饱和度从0%(变性)到100%(完全饱和) 光线从0%(黑色)到100%(白色),平均50%。 hue是色轮上0到360º之间的值。

使用此颜色空间可能会产生更好的随机颜色生成器,或者至少有一个具有更多微调控件。

答案 1 :(得分:0)

我只是想张贴自己的小东西。我不会接受这个作为答案,但我只是想用我已经收到的建议来展示一个简单的模型。主要来自Codereview:Codereview Link

public class UniqueColorGenerator {
        private int _colorIndex;
        private readonly int _offsetIncrement;

        public UniqueColorGenerator() {
            this._offsetIncrement = 1;
        }

        public UniqueColorGenerator( uint offsetIncrement ) {
            this._offsetIncrement = ( int )offsetIncrement;
        }

        public Color Next() {
            return Color.FromArgb( _colorIndex += _offsetIncrement );
        }
    }

该类与我的原始示例完全相同,但更简单,甚至增加了一些独特性的空间。你在构造函数中添加的数字越大,最终模式就越疯狂;这里有一个简单的例子,说明如果你喂养" 2834783"进入构造函数:

enter image description here

是的,所有颜色仍然是独一无二的。我可以从这个新代码中看到的唯一问题是,如果用户输入一个非常高的数字,就会出现这个问题。