Blame simple/imgfilters/filter.wind.inc.c

608c44
608c44
608c44
608c44
void filterWind(Img *img, Img *pattern, double att) {
608c44
  if (!img->data) return;
608c44
608c44
  for(int x = 0; x < img->w; ++x) {
608c44
    double nk = pattern && pattern->data ? imgCubicHCh(pattern, 0, (double)x/img->w*pattern->w, 0) : 1;
608c44
    double acc[4] = {};
608c44
    double a = 1 - pow(1 - att, nk);
608c44
    for(int y = 0; y < img->h; ++y) {
608c44
      double *cl = imgPixel(img, x, y);
608c44
      for(int c = 0; c < 4; ++c) {
608c44
        if (cl[c] < acc[c]) {
608c44
          cl[c] = acc[c];
608c44
        } else
608c44
        if (acc[c] < cl[c]) {
608c44
          acc[c] = cl[c];
608c44
        }
608c44
        acc[c] *= a;
608c44
      }
608c44
    }
608c44
  }
608c44
}