English: Antialiased chessboard using the Lanczos algorithm, made by myself based on the source in File:Antialiased.png's description. This one should be relatively close to an ideal filter, primarily because I used a lot of taps (several million) for the more problematic pixels.
This work has been released into the public domain by its author, Sesse at English Wikipedia. This applies worldwide. In some countries this may not be legally possible; if so: Sesse grants anyone the right to use this work for any purpose, without any conditions, unless such conditions are required by law.Public domainPublic domainfalsefalse
Source
Here's the source I used, written by myself. The choice of 16384x16384 might have been overkill; I cannot spot any significant differences between this and using 1024x1024 taps all over the image. The generation took about an hour on one core of an Intel Q9450.
Compile and link with
gcc -O3 -o antialias antialias.c -lm -std=gnu99
#include<stdio.h>#include<stdlib.h>#include<math.h>/* * Do a finer sampling the higher up we get in the picture, * since there's much more detail there. */#define SAMPLES_FROM_Y(y) ((16384 * 512) / (y*y + 512))#define MAX_SAMPLES SAMPLES_FROM_Y(0)floatweights[MAX_SAMPLES][MAX_SAMPLES];staticinlineintcolor(doublex,doubley){doublet,z;inti,j,k;x=x*(1.0/128.0)-0.5;y=y*(1.0/2048.0);t=1.0/(y+0.001);z=t*x;i=floor(t);j=floor(z);k=i+j;return((k%2)!=0);}staticdoublesinc(doublex){staticconstdoublecutoff=1.220703668e-4;/* sqrt(sqrt(eps)) */if(abs(x)<cutoff){/* For small |x|, use Taylor series instead */constdoublex2=x*x;constdoublex4=x2*x2;return1.0-x2/6.0+x4/120.0;}else{returnsin(x)/x;}}staticdoublelanczos_tap(doublex){if(x<-3.0||x>3.0)return0.0;if(x<0.0)returnsinc(-x*M_PI)*sinc(-x*M_PI/3.0);elsereturnsinc(x*M_PI)*sinc(x*M_PI/3.0);}staticvoidprecalculate_weights(unsignednum_samples){doubletotal=0.0;for(intyi=0;yi<num_samples;++yi){doublesy=6.0*((double)yi/num_samples-0.5);doublewy=lanczos_tap(sy);for(intxi=0;xi<num_samples;++xi){doublesx=6.0*((double)xi/num_samples-0.5);weights[yi][xi]=wy*lanczos_tap(sx);total+=weights[yi][xi];}}doubleinv_total=1.0/total;for(intyi=0;yi<num_samples;++yi){for(intxi=0;xi<num_samples;++xi){weights[yi][xi]*=inv_total;}}}staticdoubleantialiased_color(doublex,doubley,unsignednum_samples){doubleacc=0.0;doubledelta=6.0/num_samples;intxi,yi;doublesx,sy;for(yi=0,sy=y-3.0;yi<num_samples;++yi,sy+=delta){for(xi=0,sx=x-3.0;xi<num_samples;++xi,sx+=delta){if(color(sx,sy)){acc+=weights[yi][xi];}}}returnacc;}
Original upload log
The original description page was here. All following user names refer to en.wikipedia.
Reverted to version as of 14:27, 23 December 2008: Revert to original image by Sesse. In original image, gray at top of image is #808080, halfway between black and white as would be expected; in Dicklyon’s modified version, gray at top is much lighter t
Antialiased chessboard using the Lanczos algorithm, made by myself based on the source in [[File:Antialiased.png]]'s description. This one should be relatively close to an ideal filter, primarily because I used a lot of taps (several million) for the more
Captions
Add a one-line explanation of what this file represents
{{BotMoveToCommons|en.wikipedia|year={{subst:CURRENTYEAR}}|month={{subst:CURRENTMONTHNAME}}|day={{subst:CURRENTDAY}}}} {{Information |Description={{en|Antialiased chessboard using the Lanczos algorithm, made by myself based on the source in File:Antialia