Blame filter.noise.inc.c

ea5919
ea5919
ea5919
void filterNoise(Img *img) {
ea5919
  if (!img->data) return;
ea5919
  for(double *p = img->data, *e = p + 4*img->w*img->h; p < e; p += 4) {
ea5919
    p[0] = randomFloat();
ea5919
    p[1] = randomFloat();
ea5919
    p[2] = randomFloat();
ea5919
    p[3] = randomFloat();
ea5919
  }
ea5919
}
ea5919
ea5919
ea5919
void filterMulNoise(Img *img, int w, int h, double vmin, double vmax) {
ea5919
  if (!img->data || w <= 0 || h <= 0) return;
ea5919
  Img imgC = {};
ea5919
  imgInit(&imgC, w, h);
ea5919
  filterNoise(&imgC);
ea5919
  for(int y = 0; y < img->h; ++y) {
ea5919
    for(int x = 0; x < img->w; ++x) {
ea5919
      double pn[4];
ea5919
      imgCubic(&imgC, (double)x/img->w*w, (double)y/img->h*h, pn);
ea5919
      double *p = imgPixel(img, x, y);
ea5919
      p[0] *= vmin + (vmax - vmin)*pn[0];
ea5919
      p[1] *= vmin + (vmax - vmin)*pn[1];
ea5919
      p[2] *= vmin + (vmax - vmin)*pn[2];
ea5919
      p[3] *= vmin + (vmax - vmin)*pn[3];
ea5919
    }
ea5919
  }
ea5919
  imgDestroy(&imgC);
ea5919
}
ea5919
ea5919
ea5919
void filterMulNoiseGray(Img *img, int w, int h, double vmin, double vmax) {
ea5919
  if (!img->data || w <= 0 || h <= 0) return;
ea5919
  Img imgC = {};
ea5919
  imgInit(&imgC, w, h);
ea5919
  filterNoise(&imgC);
ea5919
  for(int y = 0; y < img->h; ++y) {
ea5919
    for(int x = 0; x < img->w; ++x) {
ea5919
      double pn = vmin + (vmax - vmin)*imgCubicCh(&imgC, 0, (double)x/img->w*w, (double)y/img->h*h);
ea5919
      double *p = imgPixel(img, x, y);
ea5919
      p[0] *= pn;
ea5919
      p[1] *= pn;
ea5919
      p[2] *= pn;
ea5919
      //p[3] *= pn;
ea5919
    }
ea5919
  }
ea5919
  imgDestroy(&imgC);
ea5919
}
ea5919
ea5919