Compare commits

..

5 Commits

Author SHA1 Message Date
tth
c59eedd33c better args parsing in mkfimg 2021-05-04 10:29:02 +02:00
tth
65eaca26cc nothing to see here 2021-05-04 09:56:18 +02:00
tth
87ab682879 questions et reponses, la suite 2021-05-03 19:37:08 +02:00
tth
08a30d9620 no more oomk ? 2021-05-01 17:54:42 +02:00
tth
b63b590e1d return an error code when needed 2021-04-30 15:32:14 +02:00
8 changed files with 122 additions and 23 deletions

View File

@ -98,18 +98,23 @@ Une représentation approximative d'un monde physique invisible.
L'infinie bio-complexité de notre système oculaire et ses interactions L'infinie bio-complexité de notre système oculaire et ses interactions
avec notre multivac neuronal n'est devenue quantifiable qu'avec avec notre multivac neuronal n'est devenue quantifiable qu'avec
l'arrivée des premiers calculateurs l'arrivée des premiers calculateurs
numériques quand certains ont songé à passer du flou mental à la grille physique. numériques quand certains ont songé à passer du flou mental à la grille
physique.
Les détails techniques sur cette représentation sont en page
\pageref{FloatImg desc}, avec des pointeurs dedans.
Ah, les pointeurs, la pire chose du monde\dots
\subsubsection*{quelques rappels de comment on acquiert et numérise une image} \subsubsection*{quelques rappels de comment on acquiert et numérise une image}
Avant de se l'approprier, il vaut la rendre réelle dans sa vision intérieur. Avant de se l'approprier, il vaut la rendre réelle dans sa vision intérieur.
Il faut l'imaginer comme des lignes de code interposées entre la grille Il faut l'imaginer comme des lignes de code interposées entre la grille
physique dont on vient de parler, et une autre grille, bien réelle, des physique dont on vient de parler, et une autre grille, bien réelle, des
pixels sur notre écran Trititron\footnote{Sony, u'r the best !} de 44cm. pixels sur notre écran Trinitron de 44cm.
Et puisque on en parle, je me permet de vous conseiller avec Et puisque on en parle, je me permet de vous conseiller avec
\textbf{vigueur} la webcam de Playstation (aka PsEye). \textbf{vigueur} la webcam de Playstation (aka PsEye).
Moins de 10 Euros Moins de 10 Euros
dans les trocs, et un grain d'image vraiment présent. dans les machin-trocs, et un grain d'image vraiment présent.
\texttt{https://fr.wikipedia.org/wiki/PlayStation\_Eye} \texttt{https://fr.wikipedia.org/wiki/PlayStation\_Eye}
@ -123,9 +128,9 @@ grains de lumière chromatisés.
\subsubsection*{quelques belles images / schémas polychromes en intro pour \subsubsection*{quelques belles images / schémas polychromes en intro pour
illustrer tout ça} illustrer tout ça}
Tour cela est dans le grand Ternet\footnote{\textsl{bik kudo 2 J Postel}} Tour cela est dans le grand Ternet\footnote{\textsl{Thanks, mister J Postel}}
mondial, je pourrais même vous donner l'url si vous me promettez de ne pas mondial, je pourrais même vous donner l'url si vous me promettez de ne pas
la glissr dans le capitalisme de surveillance. la glisser dans le capitalisme de surveillance.
% =================================================================== % ===================================================================
@ -344,10 +349,12 @@ sont décrits par un ensemble
de données (certains appelent ça des \textsl{metadatas}) regroupées de données (certains appelent ça des \textsl{metadatas}) regroupées
dans une jolie structure que nous allons examiner dès maintenant. dans une jolie structure que nous allons examiner dès maintenant.
\label{FloatImg desc}
\begin{lstlisting} \begin{lstlisting}
/* in memory descriptor */ /* in memory descriptor */
typedef struct { typedef struct {
int magic; unsigned long magic;
int width; int width;
int height; int height;
int type; int type;
@ -356,7 +363,7 @@ typedef struct {
float *R, *G, *B, *A; float *R, *G, *B, *A;
int reserved; int reserved;
} FloatImg; } FloatImg;
\end{lstlisting}\index{FloatImg} \end{lstlisting}\index{FloatImg desc}
Le premier champ, \texttt{magic}, servira un de ces jours à Le premier champ, \texttt{magic}, servira un de ces jours à
robustifier l'ensemble du machin. robustifier l'ensemble du machin.
@ -919,13 +926,16 @@ Usage: mkfimg [options] quux.fimg width height
-v increase verbosity -v increase verbosity
\end{verbatim} \end{verbatim}
Il y a deux syntaxes possibles pour les dimensions de l'image générée~:
deux nombres séparés ou la notation \texttt{WIDTHxHEIGHT}.
La plupart des types d'image générée prennent un paramètre flottant qui La plupart des types d'image générée prennent un paramètre flottant qui
devra être donné avec l'option \texttt{-k F.F} avec une valeur par défaut devra être donné avec l'option \texttt{-k F.F} avec une valeur par défaut
à $1.0$, ce qui n'est pas toujours une bonne valeur. à $1.0$, ce qui n'est pas toujours une bonne valeur.
\begin{description} \index{XXX} \begin{description} \index{XXX}
\item [black/gray/grey:] efface avec 0.0 (black) ou avec la valeur \item [black/gray/grey:] efface avec 0.0 (black) ou avec la valeur
\texttt{-k} (gray). \texttt{-k} (niveau de gris).
\item [drand48:] beaucoup de bruit dans chacun des canaux. \item [drand48:] beaucoup de bruit dans chacun des canaux.
\item [hdeg/vdeg:] dégradé du noir au blanc (relatif à \texttt{-k}). \item [hdeg/vdeg:] dégradé du noir au blanc (relatif à \texttt{-k}).
\end{description} \end{description}
@ -1042,8 +1052,10 @@ D'un autre coté, écrire un greffon d'import/export pour
Gimp\index{Gimp} ou ImageMagick\index{ImageMagick} ou Krita\index{krita} Gimp\index{Gimp} ou ImageMagick\index{ImageMagick} ou Krita\index{krita}
ne devrait pas être trop difficile. Des volontaires ? ne devrait pas être trop difficile. Des volontaires ?
\textsl{D'ailleurs, pourquoi $N$ logiciels indépendants alors q'un D'ailleurs, pourquoi $N$ logiciels indépendants alors q'un
seul devrait être nécessaire ?} seul devrait être nécessaire ?, ce qui me conduit à envisager
un \textsl{exporter} universel, mais dont l'ergonomie et les
paramètres possibles doivent être réfléchis avec vigueur et nonchalance.
% ------------------------- % -------------------------

View File

@ -4,11 +4,12 @@
* http://la.buvette.org/photos/cumul * http://la.buvette.org/photos/cumul
*/ */
#define FIMG_VERSION 142 #define FIMG_VERSION 143
/* /*
* in memory descriptor * in memory descriptor
*/ */
#define MAGIC_FIMG 0x00F11F00
typedef struct { typedef struct {
unsigned long magic; unsigned long magic;
int width; int width;
@ -28,6 +29,7 @@ typedef struct {
int w, h, t; int w, h, t;
} FimgFileHead; } FimgFileHead;
#define MAGIC_AREA51 0xA5EA0051
typedef struct { typedef struct {
unsigned long magic; unsigned long magic;
int w, h; int w, h;

View File

@ -3,7 +3,7 @@
# Please, use the 'Gloabl.makefile' system ! # Please, use the 'Gloabl.makefile' system !
COPT = -Wall -fpic -g -no-pie -DDEBUG_LEVEL=0 COPT = -Wall -fpic -g -no-pie -DDEBUG_LEVEL=0
DEPS = ../floatimg.h Makefile DEPS = ../floatimg.h Makefile
OBJS = fimg-png.o fimg-tiff.o misc-plots.o filtrage.o utils.o \ OBJS = fimg-png.o fimg-tiff.o misc-plots.o filtrage.o utils.o \
@ -11,7 +11,8 @@ OBJS = fimg-png.o fimg-tiff.o misc-plots.o filtrage.o utils.o \
geometry.o rotate.o fimg-openexr.o \ geometry.o rotate.o fimg-openexr.o \
equalize.o fimg-fits.o saturation.o histogram.o \ equalize.o fimg-fits.o saturation.o histogram.o \
hsv.o classif.o contour2x2.o qsortrgb.o exporter.o \ hsv.o classif.o contour2x2.o qsortrgb.o exporter.o \
displacement.o dithering.o plasmas.o incrustator.o displacement.o dithering.o plasmas.o incrustator.o \
recurse.o
#--------------------------------------------------------------- #---------------------------------------------------------------
@ -35,6 +36,9 @@ tests.o: tests.c tests.h $(DEPS)
# ### # ###
recurse.o: recurse.c $(DEPS)
gcc $(COPT) -c $<
incrustator.o: incrustator.c $(DEPS) incrustator.o: incrustator.c $(DEPS)
gcc $(COPT) -c $< gcc $(COPT) -c $<

26
funcs/recurse.c Normal file
View File

@ -0,0 +1,26 @@
/*
RECURSION 'QUADTREE' SUR LES IMAGES
-----------------------------------
*/
#include <stdio.h>
#include <math.h>
#include "../floatimg.h"
/* -------------------------------------------------------------------- */
/* may be we need some private variables ? */
/* -------------------------------------------------------------------- */
/* nouveau 29 avril 2021, pendant un autre masque-flamme coronavidique */
int fimg_recursion_proto(FloatImg *src, FloatImg *dst, int notused)
{
#if DEBUG_LEVEL
fprintf(stderr, ">>> %s ( %p %p %d )\n", __func__, src, dst, notused);
#endif
return -1;
}
/* -------------------------------------------------------------------- */
/* -------------------------------------------------------------------- */

View File

@ -16,6 +16,41 @@
extern int verbosity; extern int verbosity;
/* --------------------------------------------------------------------- */
int fimg_recursion_proto(FloatImg *src, FloatImg *dst, int notused);
int essai_recursion(char *inf, char *outf, int flags)
{
int foo;
FloatImg src, dst;
fprintf(stderr, ">>> %s ( '%s' '%s' 0x%04X )\n", __func__,
inf, outf, flags);
foo = fimg_create_from_dump(inf, &src);
if (0 != foo) {
fprintf(stderr, "%s: err %d loading image '%s'\n", __func__,
foo, inf);
return foo;
}
fimg_clone(&src, &dst, 0);
foo = fimg_recursion_proto(&src, &dst, flags);
if (foo) {
fprintf(stderr, "%s: fail %d\n", __func__, foo);
return foo;
}
foo = fimg_export_picture(&dst, outf, 0);
if (foo) {
fprintf(stderr, "%s : err %d saving result\n", __func__, foo);
return foo;
}
return -1;
}
/* --------------------------------------------------------------------- */ /* --------------------------------------------------------------------- */
int essai_miroir(char *inf, char *outf, int flags) int essai_miroir(char *inf, char *outf, int flags)
{ {
@ -47,7 +82,7 @@ if (foo) {
return foo; return foo;
} }
return -1; return 0;
} }
/* --------------------------------------------------------------------- */ /* --------------------------------------------------------------------- */
/* nouveau 21 mars 2021 - rue d'Aragon */ /* nouveau 21 mars 2021 - rue d'Aragon */

View File

@ -169,6 +169,7 @@ if (1 != argc-optind) {
foo = convertir_fimg_en_machinable(argv[optind], "-", steps, norm_val); foo = convertir_fimg_en_machinable(argv[optind], "-", steps, norm_val);
if (foo) { if (foo) {
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 1;
} }
return 0; return 0;

View File

@ -165,6 +165,13 @@ if (foo) {
* we can now create the resultant image, and going coredump... * we can now create the resultant image, and going coredump...
*/ */
foo = fimg_create(&dest, srcA.width, srcA.height, srcA.type); foo = fimg_create(&dest, srcA.width, srcA.height, srcA.type);
if (foo) {
fprintf(stderr, "%s: crash coredump on create fimg\n", argv[0]);
#if MUST_ABORT
abort();
#endif
exit(1);
}
// fimg_describe(&dest, "destination"); // fimg_describe(&dest, "destination");
foo = exec_operator(&srcA, &srcB, action, &dest); foo = exec_operator(&srcA, &srcB, action, &dest);

View File

@ -63,7 +63,7 @@ int foo;
puts("Usage:\tmkfimg [options] quux.fimg width height"); puts("Usage:\tmkfimg [options] quux.fimg width height");
puts("\t-k N.N\tgive a float parameter"); puts("\t-k N.N\tgive a float parameter");
fputs("\t-t bla\thowto make the pic\n\t\t", stdout); fputs("\t-t bla\thowto make the pic :\n\t\t", stdout);
for (foo=0; types[foo].code; foo++) { for (foo=0; types[foo].code; foo++) {
printf("%s ", types[foo].name); printf("%s ", types[foo].name);
} }
@ -79,7 +79,7 @@ exit(0);
/* --------------------------------------------------------------------- */ /* --------------------------------------------------------------------- */
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
int foo, opt; int foo, opt, nbargs;
int width, height; int width, height;
char *fname; char *fname;
float fvalue = 1.0; float fvalue = 1.0;
@ -103,21 +103,33 @@ for (foo=0; foo<argc; foo++)
fprintf(stderr, "%3d %s\n", foo, argv[foo]); fprintf(stderr, "%3d %s\n", foo, argv[foo]);
#endif #endif
if (3 != argc-optind) {
fprintf(stderr, "%s need filename, width & height\n", argv[0]);
exit(1);
}
if (type < 0) { if (type < 0) {
fprintf(stderr, "type '%s' is unknow\n", tname); fprintf(stderr, "type '%s' is unknow\n", tname);
exit(2); exit(2);
} }
nbargs = argc-optind;
switch (nbargs) {
case 2:
if (2!=parse_WxH(argv[optind+1], &width, &height)) {
fprintf(stderr, "%s: parse error on '%s'\n",
argv[0], argv[optind+1]);
exit(1);
}
break;
case 3:
width = atoi(argv[optind+1]);
height = atoi(argv[optind+2]);
break;
default:
fprintf(stderr, "%s need filename, width & height\n", argv[0]);
exit(1);
}
fname = argv[optind]; fname = argv[optind];
width = atoi(argv[optind+1]); height = atoi(argv[optind+2]);
if (verbosity>1) fprintf(stderr, "*** mkfimg *** %s %s\n", __DATE__, __TIME__); if (verbosity>1) fprintf(stderr, "*** mkfimg *** %s %s\n", __DATE__, __TIME__);
if (verbosity) fprintf(stderr, "making '%s' %d x %d, type %d\n", if (verbosity) fprintf(stderr, "making '%s' %dx%d, type %d\n",
fname, width, height, type); fname, width, height, type);
srand48(getpid() ^ time(NULL)); srand48(getpid() ^ time(NULL));