parent
6b424ea72a
commit
538a8ffa82
@ -0,0 +1,118 @@ |
||||
/*
|
||||
* INTERPOLATOR 2070 |
||||
* |
||||
* Don't use that software in real life ! |
||||
* |
||||
* imported in FloatImg Mon Nov 9 19:08:57 CET 2020 |
||||
* |
||||
*/ |
||||
#include <stdio.h> |
||||
#include <string.h> |
||||
#include <stdlib.h> |
||||
#include <unistd.h> |
||||
#include <glob.h> |
||||
|
||||
#include "../floatimg.h" |
||||
|
||||
// XXX #include "fonctions.h"
|
||||
|
||||
int verbosity; |
||||
|
||||
/* -------------------------------------------------------------- */ |
||||
int interpolator(char *pattern, char *outdir, int Nsteps) |
||||
{ |
||||
FloatImg A, B, Out, *pFirst, *pSecond, *pTmp; |
||||
glob_t globbuf; |
||||
int foo, idx, ipng, w, h, step; |
||||
int iarray[3]; |
||||
char *cptr, line[200]; |
||||
float coef; |
||||
|
||||
fprintf(stderr, "\nfrom %s to %s with %d steps.\n", pattern, outdir, Nsteps); |
||||
|
||||
memset(&globbuf, 0, sizeof(glob_t)); |
||||
foo = glob(pattern, 0, NULL, &globbuf); |
||||
fprintf(stderr, "globbing '%s' -> %d, %ld files found\n", |
||||
pattern, foo, globbuf.gl_pathc); |
||||
|
||||
if (0 == globbuf.gl_pathc) { |
||||
fprintf(stderr, "%s : no file found, aborting\n", __func__); |
||||
return -1; |
||||
} |
||||
|
||||
foo = fimg_fileinfos(globbuf.gl_pathv[0], iarray); |
||||
w = iarray[0], h = iarray[1]; |
||||
fprintf(stderr, "\tfirst image size : %dx%d\n", w, h); |
||||
|
||||
fimg_create(&A, w, h, 3); pFirst = &A; |
||||
fimg_create(&B, w, h, 3); pSecond = &B; |
||||
fimg_create(&Out, w, h, 3); |
||||
|
||||
pTmp = NULL; |
||||
|
||||
ipng = 0; |
||||
for (idx=0; idx<globbuf.gl_pathc; idx++) { |
||||
|
||||
cptr = globbuf.gl_pathv[idx]; |
||||
|
||||
/* read the next file in B */ |
||||
fprintf(stderr, "loading %s\n", cptr); |
||||
foo = fimg_load_from_dump(cptr, &B); |
||||
if (foo) { |
||||
fprintf(stderr, "load #%d from dump -> %d\n", idx, foo); |
||||
continue; |
||||
} |
||||
|
||||
for (step=0; step<Nsteps; step++) { |
||||
coef = (float)step / (float)Nsteps; |
||||
fimg_interpolate(pSecond, pFirst, &Out, coef); |
||||
|
||||
sprintf(line, "%s/%05d.png", outdir, ipng); |
||||
foo = fimg_save_as_png(&Out, line, 0); |
||||
if (foo) { |
||||
fprintf(stderr, "err saving %s\n", line); |
||||
return -8; |
||||
} |
||||
ipng++; |
||||
} |
||||
|
||||
#if 1 |
||||
/* temporary hack : move datas */ |
||||
fimg_copy_data(&B, &A); |
||||
#else |
||||
/* swap pointers to the two picz */ |
||||
pTmp = pSecond; |
||||
pSecond = pFirst; |
||||
pFirst = pTmp; |
||||
/* THIS CODE DON'T WORK !!! */ |
||||
#endif |
||||
} |
||||
|
||||
fprintf(stderr, "generated %d png files\n", ipng); |
||||
|
||||
return 0; |
||||
} |
||||
/* -------------------------------------------------------------- */ |
||||
int main (int argc, char *argv[]) |
||||
{ |
||||
int foo; |
||||
int nbrsteps = 9; |
||||
|
||||
fprintf(stderr, "*** %s : compiled by tTh, %s %s\n", __FILE__, |
||||
__DATE__, __TIME__); |
||||
fimg_print_version(2); |
||||
|
||||
if (4 != argc) { |
||||
fprintf(stderr, "args: <in globpattern> <out dir> <nbrsteep>\n"); |
||||
exit(1); |
||||
} |
||||
|
||||
nbrsteps = atoi(argv[3]); |
||||
|
||||
foo = interpolator(argv[1], argv[2], nbrsteps); |
||||
|
||||
fprintf(stderr, "interpolator -> %d\n", foo); |
||||
|
||||
return 0; |
||||
} |
||||
/* -------------------------------------------------------------- */ |
Loading…
Reference in new issue