Compare commits

...

5 Commits

Author SHA1 Message Date
tonton Th
14256b1476 rotate90 integrated in fimgfx 2020-03-26 09:12:25 +01:00
tonton Th
a600cbbf70 add tools/.sh to tarball target 2020-03-26 08:59:50 +01:00
tonton Th
17415bd344 minor change on the useless display 2020-03-26 08:41:00 +01:00
tonton Th
83ec42e140 tweaking the pdf documentation 2020-03-24 11:45:09 +01:00
tonton Th
e128add5a6 added a new function : fimg_put_rgb 2020-03-24 10:41:57 +01:00
10 changed files with 102 additions and 39 deletions

2
.gitignore vendored
View File

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

View File

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

View File

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

View File

@ -2,7 +2,7 @@
* floatimg.h
*/
#define FIMG_VERSION 96
#define FIMG_VERSION 97
/*
* in memory descriptor
@ -62,6 +62,7 @@ int fimg_describe(FloatImg *head, char *txt);
char *fimg_str_type(int type);
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_put_rgb(FloatImg *head, int x, int y, float *rgb);
int fimg_clear(FloatImg *fimg);
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);

View File

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

View File

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

View File

@ -314,3 +314,24 @@ prgb[2] = head->B[offset];
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;
}
/* --------------------------------------------------------------------- */

23
tools/essai.sh Executable file
View File

@ -0,0 +1,23 @@
#!/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);
if (verbosity)
if (foo)
fprintf(stderr, "%s : got a %d from convertor\n", argv[0], foo);
return 0;

View File

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