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.
Sesse at Inggeris Wikipedia selaku pemegang hak cipta karya ini melepaskan karya ini ke dalam domain awam di seluruh dunia. Di sesetengah negara, undang-undangnya mungkin tidak mengizinkan; jika begitu: Sesse memberi sesiapa sahaja hak untuk menggunakan karya ini untuk apa jua tujuan, tanpa sebarang syarat, melainkan undang-undang menetapkan syarat-syarat sedemikian.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;}
Log muat naik asal
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