Changeset 2802


Ignore:
Timestamp:
08/29/08 02:03:50 (5 years ago)
Author:
sam
Message:
  • blur.c: support wrap around images in box blur (it's actually support for non-wrap-around images; wrap around was the default behaviour).
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libpipi/trunk/pipi/filter/blur.c

    r2801 r2802  
    2929 
    3030#if !defined TEMPLATE_FILE /* This file uses the template system */ 
    31 #define TEMPLATE_FLAGS SET_FLAG_GRAY 
     31#define TEMPLATE_FLAGS SET_FLAG_GRAY | SET_FLAG_WRAP 
    3232#define TEMPLATE_FILE "filter/blur.c" 
    3333#include "pipi_template.h" 
     
    132132pipi_image_t *pipi_box_blur_ext(pipi_image_t *src, int m, int n) 
    133133{ 
    134     if(src->last_modified == PIPI_PIXELS_Y_F) 
    135         return boxblur_gray(src, m, n); 
    136  
    137     return boxblur(src, m, n); 
     134    if(src->wrap) 
     135    { 
     136        if(src->last_modified == PIPI_PIXELS_Y_F) 
     137            return boxblur_gray_wrap(src, m, n); 
     138 
     139        return boxblur_wrap(src, m, n); 
     140    } 
     141    else 
     142    { 
     143        if(src->last_modified == PIPI_PIXELS_Y_F) 
     144            return boxblur_gray(src, m, n); 
     145 
     146        return boxblur(src, m, n); 
     147    } 
    138148} 
    139149 
    140150#else /* XXX: the following functions use the template system */ 
    141151 
    142 /* FIXME: FLAG_WRAP */ 
    143152static pipi_image_t *SUFFIX(boxblur)(pipi_image_t *src, int m, int n) 
    144153{ 
     
    147156    float *srcdata, *dstdata; 
    148157    double *acc; 
    149     int x, y, w, h, i, j, size; 
     158    int x, y, w, h, i, j, i2, j2, size; 
    150159 
    151160    w = src->w; 
     
    172181        for(j = -n; j <= n; j++) 
    173182        { 
    174             int j2 = (j < 0) ? h - 1 - ((-j - 1) % h) : j % h; 
     183            if(FLAG_WRAP) 
     184                j2 = (j < 0) ? h - 1 - ((-j - 1) % h) : j % h; 
     185            else 
     186                j2 = (j < 0) ? 0 : (j >= h) ? h - 1 : j; 
     187 
    175188            if(FLAG_GRAY) 
    176189                t += srcdata[j2 * w + x]; 
     
    204217        for(i = -m; i <= m; i++) 
    205218        { 
    206             int i2 = (i < 0) ? w - 1 - ((-i - 1) % w) : i % w; 
     219            if(FLAG_WRAP) 
     220                i2 = (i < 0) ? w - 1 - ((-i - 1) % w) : i % w; 
     221            else 
     222                i2 = (i < 0) ? 0 : (i >= w) ? w - 1 : i; 
    207223 
    208224            if(FLAG_GRAY) 
     
    235251 
    236252            u = x - m; 
    237             u2 = (u < 0) ? w - 1 - ((-u - 1) % w) : u % w; 
     253            if(FLAG_WRAP) 
     254                u2 = (u < 0) ? w - 1 - ((-u - 1) % w) : u % w; 
     255            else 
     256                u2 = (u < 0) ? 0 : (u >= w) ? w - 1 : u; 
    238257            v = x + m + 1; 
    239             v2 = (v < 0) ? w - 1 - ((-v - 1) % w) : v % w; 
     258            if(FLAG_WRAP) 
     259                v2 = (v < 0) ? w - 1 - ((-v - 1) % w) : v % w; 
     260            else 
     261                v2 = (v < 0) ? 0 : (v >= w) ? w - 1 : v; 
    240262            if(FLAG_GRAY) 
    241263            { 
     
    257279 
    258280            u = y - n; 
    259             u2 = (u < 0) ? w - 1 - ((-u - 1) % w) : u % w; 
     281            if(FLAG_WRAP) 
     282                u2 = (u < 0) ? w - 1 - ((-u - 1) % w) : u % w; 
     283            else 
     284                u2 = (u < 0) ? 0 : (u >= w) ? w - 1 : u; 
    260285            v = y + n + 1; 
    261             v2 = (v < 0) ? w - 1 - ((-v - 1) % w) : v % w; 
     286            if(FLAG_WRAP) 
     287                v2 = (v < 0) ? w - 1 - ((-v - 1) % w) : v % w; 
     288            else 
     289                v2 = (v < 0) ? 0 : (v >= w) ? w - 1 : v; 
    262290            if(FLAG_GRAY) 
    263291            { 
Note: See TracChangeset for help on using the changeset viewer.