Compare commits

..

No commits in common. "14256b14767ce445d057aa68cb5c66ea2d5ebbc4" and "e9a61bb96ac95b35b99237f46a59025a9355f79b" have entirely different histories.

10 changed files with 39 additions and 102 deletions

2
.gitignore vendored
View File

@ -51,5 +51,3 @@ tools/addpnm2fimg
tools/cumulfimgs tools/cumulfimgs
tools/fimgops tools/fimgops
tools/fimgfx tools/fimgfx
tools/*.png

View File

@ -18,7 +18,7 @@ essai: essai.c libfloatimg.a floatimg.h Makefile
TOTAR = *.[ch] Makefile *.sh *.md \ TOTAR = *.[ch] Makefile *.sh *.md \
doc/the*.tex doc/mk*.sh doc/*.txt \ doc/the*.tex doc/mk*.sh doc/*.txt \
funcs/*.[ch] funcs/Makefile \ funcs/*.[ch] funcs/Makefile \
tools/*.[ch] tools/*.sh tools/README.md tools/Makefile \ tools/*.[ch] tools/READEME.md tools/Makefile \
v4l2/*.[ch] v4l2/Makefile \ v4l2/*.[ch] v4l2/Makefile \
scripts/*.sh scripts/README.md \ scripts/*.sh scripts/README.md \
lib/*.[ch] lib/Makefile lib/*.[ch] lib/Makefile

View File

@ -10,7 +10,7 @@
% \lstset{frame=single} % dessin d'un cadre autour du listing % \lstset{frame=single} % dessin d'un cadre autour du listing
\lstset{basicstyle=\ttfamily\small} \lstset{basicstyle=\ttfamily\small}
\lstset{aboveskip=0.333em,belowskip=0.666em} \lstset{aboveskip=1em,belowskip=1em}
\usepackage{babel} \usepackage{babel}
@ -26,7 +26,7 @@
\usepackage{xspace} \usepackage{xspace}
\usepackage[verbose]{layout} \usepackage[verbose]{layout}
\setlength \parskip {0.333em} \setlength \parskip {0.40em}
\makeatletter \makeatletter
% exlpication de ce truc ? % exlpication de ce truc ?
@ -518,10 +518,8 @@ désirées.
int fimg_rotate_90(FloatImg *src, FloatImg *dst, int notused); int fimg_rotate_90(FloatImg *src, FloatImg *dst, int notused);
\end{lstlisting} \end{lstlisting}
Rotation\index{rotation} de 90 degrés dans le sens Rotation de 90 degrés dans le sens horlogique d'une image RGB.
horlogique\footnote{ou trigonométrique,le code et la doc L'image de destination peut être soir vierge, soit pré-allouée
ne semblent pas d'accord.} d'une image RGB.
L'image de destination peut être soit vierge, soit pré-allouée
aux bonnes dimensions (échange W et H). aux bonnes dimensions (échange W et H).
% ---------------------------------- % ----------------------------------
@ -651,13 +649,13 @@ Bon, il reste le souci avec les bordures, souci qui ne peut
Passons maintenant aux choses sérieuses, et définissons la Passons maintenant aux choses sérieuses, et définissons la
description d'un filtre 3x3. description d'un filtre 3x3.
\begin{lstlisting} \begin{verbatim}
typedef struct { typedef struct {
float matrix[9]; float matrix[9];
float mult; float mult;
float offset; float offset;
} FimgFilter3x3; } FimgFilter3x3;
\end{lstlisting} \end{verbatim}
L'usage des champs \texttt{mult} et \texttt{offset} n'est pas L'usage des champs \texttt{mult} et \texttt{offset} n'est pas
clairement défini. Le prototype de la fonction de filtrage clairement défini. Le prototype de la fonction de filtrage
@ -665,9 +663,9 @@ non plus, mais assez simpe quand même. Source et destination
ne peuvent désigner la même image, et le champ \texttt{matrix} ne peuvent désigner la même image, et le champ \texttt{matrix}
du filtre doit contenir des valeurs cohérentes. du filtre doit contenir des valeurs cohérentes.
\begin{lstlisting} \begin{verbatim}
int fimg_filter_3x3(FloatImg *src, FloatImg *dst, FimgFilter3x3 *filtr) int fimg_filter_3x3(FloatImg *src, FloatImg *dst, FimgFilter3x3 *filtr)
\end{lstlisting} \end{verbatim}
Comme dans la plupart des cas, la gestion des valeurs négatives Comme dans la plupart des cas, la gestion des valeurs négatives
de pixel est laissé au hasard. Quoique, il doit bien exister de pixel est laissé au hasard. Quoique, il doit bien exister
@ -1065,6 +1063,7 @@ calculé quelques lignes plus haut.
\begin{verbatim} \begin{verbatim}
# write the output as PNG for video encoding # write the output as PNG for video encoding
# #
fimg2png ${FDST} ${dst} fimg2png ${FDST} ${dst}
@ -1183,12 +1182,12 @@ Pour afficher notre format .fimg exotique avec \texttt{display}, vous
devez mettre ce bout de XML\index{XML} dans le fichier devez mettre ce bout de XML\index{XML} dans le fichier
\texttt{\$HOME/.magick/delegates.xml}~: \texttt{\$HOME/.magick/delegates.xml}~:
\begin{lstlisting} \begin{verbatim}
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<delegatemap> <delegatemap>
<delegate decode="fimg" command="fimg2png '%i' '%o'"/> <delegate decode="fimg" command="fimg2png '%i' '%o'"/>
</delegatemap> </delegatemap>
\end{lstlisting} \end{verbatim}
C'est juste un hack rapide, qui ne fonctionne pas très bien avec C'est juste un hack rapide, qui ne fonctionne pas très bien avec
d'autres commande de IM, comme identify, qui a tendance à d'autres commande de IM, comme identify, qui a tendance à

View File

@ -2,7 +2,7 @@
* floatimg.h * floatimg.h
*/ */
#define FIMG_VERSION 97 #define FIMG_VERSION 96
/* /*
* in memory descriptor * in memory descriptor
@ -62,7 +62,6 @@ int fimg_describe(FloatImg *head, char *txt);
char *fimg_str_type(int type); char *fimg_str_type(int type);
int fimg_plot_rgb (FloatImg *head, int x, int y, float r, float g, float b); int fimg_plot_rgb (FloatImg *head, int x, int y, float r, float g, float b);
int fimg_get_rgb(FloatImg *head, int x, int y, float *rgb); int fimg_get_rgb(FloatImg *head, int x, int y, float *rgb);
int fimg_put_rgb(FloatImg *head, int x, int y, float *rgb);
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_rgb_constant(FloatImg *head, float r, float g, float b); int fimg_rgb_constant(FloatImg *head, float r, float g, float b);

View File

@ -34,7 +34,7 @@ geometry.o: geometry.c $(DEPS)
gcc $(COPT) -c $< gcc $(COPT) -c $<
rotate.o: rotate.c $(DEPS) rotate.o: rotate.c $(DEPS)
gcc $(COPT) -c $< gcc $(COPT) -DDEBUG_LEVEL=1 -c $<
sfx0.o: sfx0.c $(DEPS) sfx0.o: sfx0.c $(DEPS)
gcc $(COPT) -c $< gcc $(COPT) -c $<

View File

@ -31,9 +31,7 @@ if (src->type != FIMG_TYPE_RGB) {
/* check if dst pic is not allocated */ /* check if dst pic is not allocated */
if ( 0 == (dst->type | dst->width | dst->height) ) { if ( 0 == (dst->type | dst->width | dst->height) ) {
#if DEBUG_LEVEL
fprintf(stderr, "in %s, %p is empty\n", __func__, dst); fprintf(stderr, "in %s, %p is empty\n", __func__, dst);
#endif
/* OK allocate a new fpic */ /* OK allocate a new fpic */
foo = fimg_create(dst, src->height, src->width, src->type); foo = fimg_create(dst, src->height, src->width, src->type);
if (foo) { if (foo) {
@ -56,7 +54,7 @@ if ( (src->type != dst->type) ||
for (y=0; y<src->height; y++) { for (y=0; y<src->height; y++) {
for (x=0; x<src->width; x++) { for (x=0; x<src->width; x++) {
fimg_get_rgb(src, x, y, rgb); fimg_get_rgb(src, x, y, rgb);
fimg_put_rgb(dst, y, x, rgb); fimg_plot_rgb(dst, y, x, rgb[0], rgb[1], rgb[2]);
} }
} }

View File

@ -314,24 +314,3 @@ prgb[2] = head->B[offset];
return 0; return 0;
} }
/* --------------------------------------------------------------------- */ /* --------------------------------------------------------------------- */
/* nouveau 24 mars 2020 - coronacoding */
int fimg_put_rgb(FloatImg *head, int x, int y, float *prgb)
{
int offset;
if (head->type != FIMG_TYPE_RGB) {
#if DEBUG_LEVEL > 1
fprintf(stderr, "%s : type %d is bad.\n", __func__, head->type);
#endif
return -1;
}
offset = x + (y * head->width);
head->R[offset] = prgb[0];
head->G[offset] = prgb[1];
head->B[offset] = prgb[2];
return 0;
}
/* --------------------------------------------------------------------- */

View File

@ -1,23 +0,0 @@
#!/bin/bash
#
# essai des differents outils
#
# -----------------------------------------------------
TMPF="tmp.fimg"
# -----------------------------------------------------
function essai_rot90
{
echo "=== " $0 " ==="
./mkfimg -v -t hdeg $TMPF 800 600
./fimg2png -v $TMPF foo.png
./fimgfx -v rot90 $TMPF bar.fimg
}
# -----------------------------------------------------
essai_rot90
# -----------------------------------------------------

View File

@ -88,7 +88,7 @@ if (2 != argc-optind) {
} }
foo = convertir_fimg_en_PNG(argv[optind], argv[optind+1], to_gray); foo = convertir_fimg_en_PNG(argv[optind], argv[optind+1], to_gray);
if (foo) if (verbosity)
fprintf(stderr, "%s : got a %d from convertor\n", argv[0], foo); fprintf(stderr, "%s : got a %d from convertor\n", argv[0], foo);
return 0; return 0;

View File

@ -17,27 +17,24 @@ typedef struct {
char *name; char *name;
int id; int id;
int nbarg; int nbarg;
int flags;
} Fx; } Fx;
enum fxid { Fx_cos01=5, Fx_cos010, Fx_pow2, Fx_sqrt, Fx_gray0, Fx_halfsz0, enum fxid { Fx_cos01=5, Fx_cos010, Fx_pow2, Fx_sqrt, Fx_gray0, Fx_halfsz0,
Fx_rot90,
Fx_xper }; Fx_xper };
Fx fx_list[] = { Fx fx_list[] = {
{ "cos01", Fx_cos01, 0, 1 }, { "cos01", Fx_cos01, 0 },
{ "cos010", Fx_cos010, 0, 1 }, { "cos010", Fx_cos010, 0 },
{ "pow2", Fx_pow2, 0, 1 }, { "pow2", Fx_pow2, 0 },
{ "sqrt", Fx_sqrt, 0, 1 }, { "sqrt", Fx_sqrt, 0 },
{ "gray0", Fx_gray0, 0, 1 }, { "gray0", Fx_gray0, 0 },
{ "halfsz0", Fx_halfsz0, 0, 1 }, { "halfsz0", Fx_halfsz0, 0 },
{ "rot90", Fx_rot90, 0, 0 }, { "xper", Fx_xper, 0 },
{ "xper", Fx_xper, 0, 1 },
{ NULL, 0, 0 } { NULL, 0, 0 }
}; };
/* --------------------------------------------------------------------- */ /* --------------------------------------------------------------------- */
int lookup_fxidx(char *txt) int lookup_fx(char *txt)
{ {
Fx *fx; Fx *fx;
int n; int n;
@ -48,10 +45,10 @@ fprintf(stderr, ">>> %s ( '%s' )\n", __func__, txt);
for (n=0, fx=fx_list; fx->name; fx++, n++) { for (n=0, fx=fx_list; fx->name; fx++, n++) {
#if DEBUG_LEVEL > 1 #if DEBUG_LEVEL > 1
fprintf(stderr, " -> %3d %s\n", n, fx->name); fprintf(stderr, "-> %3d %s\n", n, fx->name);
#endif #endif
if (!strcmp(fx->name, txt)) { if (!strcmp(fx->name, txt)) {
return n; return fx->id;
} }
} }
return -1; /* NOT FOUND */ return -1; /* NOT FOUND */
@ -104,15 +101,15 @@ fimg_print_version(1);
exit(0); exit(0);
} }
/* --------------------------------------------------------------------- */ /* --------------------------------------------------------------------- */
int do_an_effect(char *sf, int fxidx, char *df) int do_an_effect(char *sf, int act, char *df)
{ {
FloatImg src, dest; FloatImg src, dest;
int foo, action; int foo;
double maxval; double maxval;
#if DEBUG_LEVEL #if DEBUG_LEVEL
fprintf(stderr, ">>> %s ( '%s' %d '%s' )\n", __func__, fprintf(stderr, ">>> %s ( '%s' %d '%s' )\n", __func__,
sf, action, df); sf, act, df);
#endif #endif
foo = fimg_create_from_dump(sf, &src); foo = fimg_create_from_dump(sf, &src);
@ -123,21 +120,13 @@ if (foo) {
maxval = (double)fimg_get_maxvalue(&src); maxval = (double)fimg_get_maxvalue(&src);
if (fx_list[fxidx].flags & 1) { foo = fimg_clone(&src, &dest, 0);
foo = fimg_clone(&src, &dest, 0); if (foo) {
if (foo) {
fprintf(stderr, "err clone %p : %d\n", &src, foo); fprintf(stderr, "err clone %p : %d\n", &src, foo);
return foo; return foo;
} }
}
else {
/* XXX */
memset(&dest, 0, sizeof(dest));
}
action = fx_list[fxidx].id; switch (act) {
switch (action) {
case Fx_cos01: case Fx_cos01:
fimg_cos_01(&src, &dest, maxval); break; fimg_cos_01(&src, &dest, maxval); break;
case Fx_cos010: case Fx_cos010:
@ -154,16 +143,14 @@ switch (action) {
case Fx_xper: case Fx_xper:
do_experiment(&src, &dest, maxval); break; do_experiment(&src, &dest, maxval); break;
case Fx_rot90:
foo = fimg_rotate_90(&src, &dest, 0); break;
case Fx_halfsz0: case Fx_halfsz0:
fprintf(stderr, "halfsize was not implemented\n"); fprintf(stderr, "not implemented\n");
return -3; return -3;
default: default:
fprintf(stderr, "%s %s : %d is bad action\n", fprintf(stderr, "%s %s : %d is bad action\n",
__FILE__, __func__, action); __FILE__, __func__, act);
break; break;
} }
@ -206,7 +193,7 @@ if (3 > argc-optind) {
} }
operator = argv[optind]; operator = argv[optind];
action = lookup_fxidx(operator); action = lookup_fx(operator);
if (action < 0) { if (action < 0) {
fprintf(stderr, "garbage found in opcode field : %s\n", operator); fprintf(stderr, "garbage found in opcode field : %s\n", operator);
exit(1); exit(1);