Bibliothèque de traitements d'images en virgule flottante.
http://la.buvette.org/photos/cumul/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
1.9 KiB
92 lines
1.9 KiB
/* |
|
* displacement.c |
|
*/ |
|
|
|
#include <stdio.h> |
|
#include <stdlib.h> |
|
#include <string.h> |
|
#include <math.h> |
|
|
|
#include "../floatimg.h" |
|
|
|
extern int verbosity; |
|
|
|
/* --------------------------------------------------------------------- */ |
|
/* nouveau 24 octobre 2020, pendant le masque-flamme coronavidique */ |
|
|
|
int fimg_displacement_0(FloatImg *psrc, FloatImg *pdst, int flags) |
|
{ |
|
int x, y, foo; |
|
float minmax[6]; |
|
float rgb[3]; |
|
float dltr, dltg, dltb; /* delta des minmax */ |
|
float dispx, dispy; |
|
|
|
int dstx, dsty; |
|
int in, out; |
|
|
|
#if DEBUG_LEVEL |
|
fprintf(stderr, ">>> %s ( %p %p 0x%04x )\n", __func__, psrc, pdst, flags); |
|
#endif |
|
|
|
if (FIMG_TYPE_RGB != psrc->type) { |
|
fprintf(stderr, "%s: bad src type %d\n", __func__, psrc->type); |
|
return -7; |
|
} |
|
if (fimg_images_not_compatible(psrc, pdst)) { |
|
fprintf(stderr, "%s: bad dst type %d\n", __func__, pdst->type); |
|
return -8; |
|
} |
|
|
|
foo = fimg_get_minmax_rgb(psrc, minmax); |
|
if (verbosity) { |
|
fimg_print_minmax(minmax, (char *)__func__); |
|
} |
|
dltr = minmax[1] - minmax[0]; |
|
dltg = minmax[3] - minmax[2]; |
|
dltb = minmax[5] - minmax[4]; |
|
|
|
in = out = 0; |
|
/* |
|
* BE WARNED ! |
|
* This code doesn't work as expected, so I have to |
|
* rewrite it, maybe when the pandemic is closed... |
|
*/ |
|
for (y=0; y<psrc->height; y++) { |
|
|
|
for (x=0; x<psrc->width; x++) { |
|
|
|
fimg_get_rgb(psrc, x, y, rgb); |
|
|
|
dispx = (float)x + (rgb[1]/dltg * 20.0); |
|
dispy = (float)y + (rgb[2]/dltb * 10.0); |
|
dstx = (int)roundf(dispx - 10.0); |
|
dsty = (int)roundf(dispy - 10.0); |
|
|
|
if ( (dstx < 0) || (dsty < 0) || |
|
(dstx >= psrc->width) || |
|
(dsty >= psrc->height) ) |
|
{ |
|
/* OUT OF DESTINATION PICTURE */ |
|
out++; |
|
} |
|
else { |
|
if (flags & 1) { |
|
/* going monochrome */ |
|
rgb[1] = rgb[2] = rgb[0]; |
|
} |
|
fimg_put_rgb(pdst, dstx, dsty, rgb); |
|
in++; |
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (verbosity) fprintf(stderr, "%s -> in %d out %d\n", __func__, in, out); |
|
|
|
return 0; |
|
} |
|
/* --------------------------------------------------------------------- */ |
|
|
|
|
|
|