starting interpolate funcs

This commit is contained in:
tth 2019-09-09 16:02:44 +02:00
parent f4001a1e13
commit 2f3a8870c4
4 changed files with 95 additions and 15 deletions

View File

@ -46,6 +46,9 @@ int fimg_plot_rgb (FloatImg *head, int x, int y, float r, float g, float b);
int fimg_clear(FloatImg *fimg); int fimg_clear(FloatImg *fimg);
int fimg_add_rgb(FloatImg *head, int x, int y, float r, float g, float b); int fimg_add_rgb(FloatImg *head, int x, int y, float r, float g, float b);
int fimg_interpolate(FloatImg *s1, FloatImg *s2, FloatImg *d, float coef);
/* 'operats' module */ /* 'operats' module */
int fimg_add(FloatImg *a, FloatImg *b, FloatImg *d); int fimg_add(FloatImg *a, FloatImg *b, FloatImg *d);
int fimg_sub(FloatImg *a, FloatImg *b, FloatImg *d); int fimg_sub(FloatImg *a, FloatImg *b, FloatImg *d);

View File

@ -4,7 +4,9 @@
COPT = -Wall -fpic -g -no-pie -DDEBUG_LEVEL=0 COPT = -Wall -fpic -g -no-pie -DDEBUG_LEVEL=0
OBJS = fimg-core.o fimg-pnm.o fimg-file.o fimg-math.o \ OBJS = fimg-core.o fimg-pnm.o fimg-file.o fimg-math.o \
fimg-timers.o operators.o fimg-2gray.o fimg-timers.o operators.o fimg-2gray.o \
interpolate.o
DEPS = Makefile ../floatimg.h DEPS = Makefile ../floatimg.h
# modify it 'as you like' # modify it 'as you like'
@ -13,7 +15,7 @@ AR=ar
all: $(OBJS) ../libfloatimg.a all: $(OBJS) ../libfloatimg.a
t: t.c ../libfloatimg.a $(DEPS) t: t.c ../libfloatimg.a $(DEPS)
gcc $(COPT) $< ../libfloatimg.a -lm -o $@ gcc $(COPT) $< ../libfloatimg.a -lpnglite -lm -o $@
# -------------------------------------------- # --------------------------------------------
@ -29,6 +31,9 @@ fimg-2gray.o: fimg-2gray.c $(DEPS)
operators.o: operators.c $(DEPS) operators.o: operators.c $(DEPS)
gcc $(COPT) -c $< gcc $(COPT) -c $<
interpolate.o: interpolate.c $(DEPS)
gcc $(COPT) -c $<
fimg-pnm.o: fimg-pnm.c $(DEPS) fimg-pnm.o: fimg-pnm.c $(DEPS)
gcc $(COPT) -c $< gcc $(COPT) -c $<

44
lib/interpolate.c Normal file
View File

@ -0,0 +1,44 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <math.h>
#include "../floatimg.h"
int verbosity;
/* ---------------------------------------------------------------- */
int fimg_interpolate(FloatImg *s1, FloatImg *s2, FloatImg *d, float coef)
{
int picsize, idx;
if (FIMG_TYPE_RGB != s1->type) {
fprintf(stderr, "%s : bad src 1 type %d on %p\n", __func__,
s1->type, s1);
return -8;
}
if (FIMG_TYPE_RGB != s2->type) {
fprintf(stderr, "%s : bad src 2 type %d on %p\n", __func__,
s2->type, s2);
return -8;
}
if (FIMG_TYPE_RGB != d->type) {
fprintf(stderr, "%s : bad dst type %d on %p\n", __func__,
d->type, d);
return -9;
}
picsize = d->width * d->height * 2;
for (idx=0; idx<picsize; idx++) {
d->R[idx] = (coef * s1->R[idx]) + ((1.0-coef) * s2->R[idx]);
}
return -1;
}
/* ---------------------------------------------------------------- */

54
lib/t.c
View File

@ -1,3 +1,8 @@
/*
* programme de test pour
* les fonctions de base.
*/
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <unistd.h> #include <unistd.h>
@ -62,25 +67,48 @@ fimg_destroy(&gray);
return 0; return 0;
} }
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
#define W 2048 /****
#define H 2048
int main(int argc, char *argv[])
{
int foo;
FloatImg dessin, noise, result;
verbosity = 1;
fimg_print_version(1);
foo = fimg_create(&dessin, W, H, 3); foo = fimg_create(&dessin, W, H, 3);
petit_dessin(&dessin); petit_dessin(&dessin);
foo = fimg_create(&noise, W, H, 3); foo = fimg_create(&noise, W, H, 3);
fimg_drand48(&noise, 0.1); fimg_drand48(&noise, 0.1);
****/
/* ---------------------------------------------------------------- */
#define W 320
#define H 240
int main(int argc, char *argv[])
{
int foo, idx;
float coef;
FloatImg dessin, noise, result;
char outname[100];
verbosity = 1;
fimg_print_version(1);
foo = fimg_create_from_png("/home/tth/TMP/floatimg/s2.png", &dessin);
foo = fimg_create_from_png("/home/tth/TMP/floatimg/s1.png", &noise);
foo = fimg_create(&result, W, H, 3); foo = fimg_create(&result, W, H, 3);
foo = fimg_mul(&dessin, &noise, &result);
essai_2gray(&result, "gray.pnm"); #define NBRE 42
for (idx=0; idx<NBRE; idx++) {
coef = (float)idx / (float)NBRE;
coef = (0.5-0.5*cos( 3.141592654*coef));
foo = fimg_interpolate(&dessin, &noise, &result, coef);
printf("%6d %9.6f\n", idx, coef);
fimg_to_gray(&result);
sprintf(outname, "/home/tth/TMP/floatimg/%05d.pnm", idx);
foo = fimg_save_as_pnm(&result, outname, 0);
}
// essai_2gray(&result, "gray.pnm");
fimg_destroy(&dessin), fimg_destroy(&noise), fimg_destroy(&result); fimg_destroy(&dessin), fimg_destroy(&noise), fimg_destroy(&result);