Danke für die eMail.
Ich habe
Box-Blur ausprobiert.
Es ist wirklich sehr schnell...sieht aber doof aus!
Alles wirkt irgendwie nach oben und unten gezerrt.
Der 3x3 Gauss wirkt da optisch viel besser.
Deshalb habe ich dessen Fehler minimiert und das "Banding" beseitigt:
[m]//The (roughly Gausian) matrix is not multiplied, it is shifted to gain speed
static DWORD g_m8rx[3][3]={{0,1,0},{1,2,1},{0,1,0}};
//Simplified 3x3 Gausian blur
inline void Blur(COLORREF* pDst,COLORREF* pSrc,DWORD w,DWORD h)
{
DWORD x,y,cx,cy,c1,c2,c3;
COLORREF Src;
for (y=1;y<h-1;y++)
for (x=1;x<w-1;x++)
{
c1=c2=c3=0;
for (cy=0;cy<3;cy++)
for (cx=0;cx<3;cx++)
{
Src=pSrc[(x+cx-1)+(y+cy-1)*w];
c1+=(Src&0xFF)<<g_m8rx[cx][cy];
Src>>=8;
c2+=(Src&0xFF)<<g_m8rx[cx][cy];
Src>>=8;
c3+=(Src&0xFF)<<g_m8rx[cx][cy];
}
pDst[x+y*w]=((c1>>5)&0xFF)+(((c2>>5)&0xFF)<<8)+(((c3>>5)&0xFF)<<16);
}
}[/m]
Auf einem Core 2 quad mit 2.4GHz braucht das für 2800x1050 Pixel ~110ms, Box-Blur braucht ~70ms.
Ich denke, das ist ok.
Das Resultat ist als stilles Update im Download. ;-)