サイズ・形式限定のBMPモザイクフィルター(little endian用)

>mosaic src.bmp dst.bmp

#include<stdio.h>
char B[1<<24];int*P=B+20,x,y,X,C,D,s,t,u;A(a,b){return(a&b)+(0x7f7f7f7f&(a^b)>>
1);}G(o,n){return(n/=2)?A(A(G(o,n),G(o+n,n)),A(G(X*n+o,n),G(X*n+o+n,n))):P[o];}
main(Y,v)char**v;{FILE*f=fopen(v[1],"rb");for(fread(B+2,1,54,f),X=*P,Y=P[1],P+=
9,D=C=X*Y;C--;)fread(P+C,1,3,f);for(;y<Y;y+=16)for(x=-X/2;x<X/2;x+=16)if(x*x+(y
-Y/2)*(y-Y/2)<65536)for(C=G(u=y*X+x+X/2,t=16);t--;)for(s=16;s--;)P[u+s+t*X]=C;
fwrite(B+2,1,54,f=fopen(v[2],"wb"));for(;D--;)fwrite(P+D,1,3,f);}