%ffp // // 12/04/99 Fixed tile buffer padding bug. // Category:"EdgeMaster" Title: "Smooth" Author: "Harald Heim" ctl(0):"V Blur (pixels)",val=20,range=(0,255) ForEveryTile:{ // Compute rounded, scaled blur radius. int BlurRadius = (2*ctl(0)+scaleFactor)/(2*scaleFactor); //Vertical blur radius { int Weight = BlurRadius*2 + 1; int total = (x_end-x_start) + (y_end-y_start); int x, y, z; int i; for (x=x_start-BlurRadius; x < x_end+BlurRadius; x++) { if (updateProgress(x-x_start, total)) break; // vertical blur... for (z=0; z < Z; z++) { int sum = 0; for (i=-BlurRadius; i <= BlurRadius; i++) { sum += src(x, y_start-1+i, z); } for (y=y_start; y < y_end; y++) { sum += src(x, y+BlurRadius, z) - src(x, y-BlurRadius-1, z); tset(x,y,z,sum/Weight); } } } for (y=y_start; y < y_end; y++) { if (updateProgress(y-y_start + (x_end-x_start), total)) break; // horizontal blur... for (z=0; z < Z; z++) { int sum = 0; for (i=-BlurRadius; i <= BlurRadius; i++) { sum += tget(x_start-1+i, y, z); } for (x=x_start; x < x_end; x++) { sum += tget(x+BlurRadius, y, z) - tget(x-BlurRadius-1, y, z); pset(x,y,z,sum/Weight); } } } } //updateProgress(0,0); return true; //Done! }