Changeset 2715 for libpipi/trunk/pipi/filter/blur.c
- Timestamp:
- Aug 14, 2008, 8:34:44 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libpipi/trunk/pipi/filter/blur.c
r2681 r2715 35 35 pipi_image_t *pipi_gaussian_blur(pipi_image_t *src, float radius) 36 36 { 37 return pipi_gaussian_blur_ext(src, radius, radius, 0.0, 0.0 );37 return pipi_gaussian_blur_ext(src, radius, radius, 0.0, 0.0, 0.0); 38 38 } 39 39 40 40 pipi_image_t *pipi_gaussian_blur_ext(pipi_image_t *src, float rx, float ry, 41 float dx, float dy)41 float angle, float dx, float dy) 42 42 { 43 43 pipi_image_t *ret; 44 44 double *kernel; 45 double Kx, Ky, t = 0.0 ;45 double Kx, Ky, t = 0.0, sint, cost, bbx, bby; 46 46 int i, j, krx, kry, m, n; 47 47 … … 49 49 if(ry < BLUR_EPSILON) ry = BLUR_EPSILON; 50 50 51 sint = sin(angle * M_PI / 180.); 52 cost = cos(angle * M_PI / 180.); 53 54 /* Compute the final ellipse's bounding box */ 55 bbx = sqrt(rx * rx * cost * cost + ry * ry * sint * sint); 56 bby = sqrt(ry * ry * cost * cost + rx * rx * sint * sint); 57 51 58 /* FIXME: the kernel becomes far too big with large values of dx, because 52 59 * we grow both left and right. Fix the growing direction. */ 53 krx = (int)(3. * rx + .99999 + ceil(abs(dx)));60 krx = (int)(3. * bbx + .99999 + ceil(abs(dx))); 54 61 m = 2 * krx + 1; 55 62 Kx = -1. / (2. * rx * rx); 56 63 57 kry = (int)(3. * ry + .99999 + ceil(abs(dy)));64 kry = (int)(3. * bby + .99999 + ceil(abs(dy))); 58 65 n = 2 * kry + 1; 59 66 Ky = -1. / (2. * ry * ry); … … 63 70 for(j = -kry; j <= kry; j++) 64 71 { 65 double ey = Ky * ((double)j + dy) * ((double)j + dy);66 67 72 for(i = -krx; i <= krx; i++) 68 73 { 69 double ex = Kx * ((double)i + dx) * ((double)i + dx); 74 double u = (double)i * cost - (double)j * sint + dx; 75 double v = (double)j * cost + (double)i * sint + dy; 76 double ex = Kx * u * u; 77 double ey = Ky * v * v; 70 78 double d = exp(ex + ey); 71 79
Note: See TracChangeset
for help on using the changeset viewer.