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