Changeset 2802 for libpipi


Ignore:
Timestamp:
Aug 29, 2008, 2:03:50 AM (12 years ago)
Author:
Sam Hocevar
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.