抖动算法

源于Bresenham直线算法,用交替的0和1表示表示[0-1]的小数.

    public struct Dithering
    {
        ushort _zero, _one;
        int _balance;
        public void Set(ushort zero, ushort one)
        {
            _zero = zero;
            _one = one;
            _balance = _one <= _zero ? -1 : 0;
        }

        public int Next()
        {
            int ret;
            if (_balance < 0)
            {
                _balance += _one;
                ret = 0;
            }
            else
            {
                _balance -= _zero;
                ret = 1;
            }
            return ret;
        }
    }

你可能感兴趣的:(c#)