Quantization Function
#define QUANT_N(V,N) ((V/(256/N))*(255/(N-1)))
Error Diffusion with Serpentine Scan
void img_dither_ds(Image *i, int n)
{
int u, v, c, q, err = 0, w = i->w-1;
for (v = 0; v < i->h; v++) {
for (u = EVEN(v)? 0 : w ; u >= 0 && u <= w; u = EVEN(v)? u+1 : u-1) {
c = img_geti(i,u,v);
q = c + err;
q = QUANT_N(q,n);
q = CLAMP(q,0,255);
img_puti(i,u,v,q);
err += c - q;
}
}
}