源于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;
}
}