Look at that, this is some kind of F-S dithering:
The original one, math involved:
if((v=BUF(x,0))>128)
{
d=255-v;
BUF(x+dir,0)-=(7*d)>>4; if(BUF(x+dir,0)<0)BUF(x+dir,0)=0;
BUF(x,1) -=(5*d)>>4; if(BUF(x,1)<0)BUF(x,1)=0;
BUF(x+dir,1)-=(1*d)>>4; if(BUF(x+dir,1)<0)BUF(x+dir,1)=0;
BUF(x-dir,1)-=(3*d)>>4; if(BUF(x-dir,0)<0)BUF(x-dir,0)=0;
BUF(x,0)=255;
}else
{
d=v;
BUF(x+dir,0)+=(7*d)>>4; if(BUF(x+dir,0)>255)BUF(x+dir,0)=255;
BUF(x,1) +=(5*d)>>4; if(BUF(x,1)>255)BUF(x,1)=255;
BUF(x+dir,1)+=(1*d)>>4; if(BUF(x+dir,1)>255)BUF(x+dir,1)=255;
BUF(x-dir,1)+=(3*d)>>4; if(BUF(x-dir,0)>255)BUF(x-dir,0)=255;
BUF(x,0)=0;
}"Optimized" one, all possible values are computed and placed in const UInt8[128] array. This one is slower...
if((v=BUF(x,0))>128)
{
d=255-v;
BUF(x+dir,0)-=fs7[d]; if(BUF(x+dir,0)<0)BUF(x+dir,0)=0;
BUF(x,1) -=fs5[d]; if(BUF(x,1)<0)BUF(x,1)=0;
BUF(x+dir,1)-=fs1[d]; if(BUF(x+dir,1)<0)BUF(x+dir,1)=0;
BUF(x-dir,1)-=fs3[d]; if(BUF(x-dir,0)<0)BUF(x-dir,0)=0;
BUF(x,0)=255;
}else
{
d=v;
BUF(x+dir,0)+=fs7[d]; if(BUF(x+dir,0)>255)BUF(x+dir,0)=255;
BUF(x,1) +=fs5[d]; if(BUF(x,1)>255)BUF(x,1)=255;
BUF(x+dir,1)+=fs1[d]; if(BUF(x+dir,1)>255)BUF(x+dir,1)=255;
BUF(x-dir,1)+=fs3[d]; if(BUF(x-dir,0)>255)BUF(x-dir,0)=255;
BUF(x,0)=0;
}
No idea, optimisations are off... am I dumb or there's something strange?
-- For information on using the Palm Developer Forums, or to unsubscribe, please see http://www.palmos.com/dev/support/forums/
