diff --git a/doc/the_floatimg_hack.tex b/doc/the_floatimg_hack.tex index 05ef765..8a8b9ba 100644 --- a/doc/the_floatimg_hack.tex +++ b/doc/the_floatimg_hack.tex @@ -995,17 +995,75 @@ ne devrait pas être trop difficile. Des volontaires ? \textsl{D'ailleurs, pourquoi $N$ logiciels indépendants alors q'un seul devrait être nécessaire ?} +% ------------------------- + +\subsection{fimg2text} + +Voici donc quelque chose qui retourne vers la bonne vieille +tradition Unix\index{Unix} et permet de traiter des images +flottantes avec des outils classiques comme l'injustement +méconnu \texttt{Awk}\index{Awk}. +Dans le comportement par défaut (le seul actuellement) cet outil +sort, pour chaque pixel, cinq valeurs~: + +\begin{itemize} + \item Les coordonnées entières $x,y$ du pixel + \item Les valeurs flottantes des composantes \textsc{rgb} +\end{itemize} + +On peut même espérer qu'un jour, il soit possible de faire +la transformation inverse. Quelle joie de générer des images +flottantes avec un programme écrit en \textit{gw-basic} :) + +\begin{verbatim} +tth@fubar:~/Devel/FloatImg/doc$ fimg2text -h +usage: + fimg2text [options] foo.fimg > bar.csv +options: + -v increase verbosity + -n 3.14 normalize picture + -s N steps on x & y +\end{verbatim} + +Vous voulez un petit exemple ? + +\begin{verbatim} +tth@fubar:~/Devel/FloatImg/doc$ mkfimg -t drand48 quux.fimg 4 2 +tth@fubar:~/Devel/FloatImg/doc$ fimg2text -s 1 quux.fimg +0 0 142.518127 84.036987 20.688946 +1 0 164.273315 68.397079 138.501587 +2 0 45.887970 25.905518 93.683243 +3 0 53.292942 222.000000 111.711548 +0 1 82.289795 113.054855 180.530014 +1 1 42.051765 114.543625 4.249123 +2 1 71.826775 96.219109 63.222294 +3 1 160.535675 136.104919 204.020691 +tth@fubar:~/Devel/FloatImg/doc$ +\end{verbatim} + +Et maintenant, vous voulez un gros exemple ? + + +% ------------------------- + + + \subsection{fimg2gray}\index{fimg2gray}\label{fimg2gray} Nous avons vu dans ce document que chaque image flottante pouvait -avoir plusieurs plans de réalité. Il ne faut en négliger aucun. +avoir plusieurs plans de réalité. Il ne faut en négliger aucun, +voire même tenter de les faire se rencontrer, se combiner et +s'influencer mutuellement. Il faut quand même deviner que pour passer de l'espace RGB\index{RGB} à une abstraction linéaire mono-dimensionnelle, il existe une foultitude de méthodes, toutes plus légitimes que les autres. \index{procrastination} Et face à l'incertitude du choix, j'ai reporté l'écriture de ce -logiciel aux calendes grecques, voire même plus tard. +logiciel aux calendes grecques, voire même plus tard, +après la grande pandémie\dots + +% ------------------------- \subsection{cumulfimgs}\index{cumulfimgs}\label{cumulfimgs} diff --git a/tools/fimg2text.c b/tools/fimg2text.c index 95b677c..e52d4da 100644 --- a/tools/fimg2text.c +++ b/tools/fimg2text.c @@ -90,6 +90,11 @@ fprintf(stderr, ">>> %25s ( '%s' '%s' %d )\n", __func__, srcname, dstname, notused); #endif +if (steps < 1) { + fprintf(stderr, "%s: steps MUST be > 0\n", __func__); + exit(1); + } + foo = fimg_fileinfos(srcname, infos); if (foo) { fprintf(stderr, "'%s' get dims -> %d\n", srcname, foo); @@ -142,11 +147,13 @@ exit(0); int main(int argc, char *argv[]) { int foo, opt; -int steps = 16; +int steps = 1; float norm_val = 222.0; /* < 0 : don't normalize */ +char separator = ' '; -while ((opt = getopt(argc, argv, "hn:s:v")) != -1) { +while ((opt = getopt(argc, argv, "f:hn:s:v")) != -1) { switch(opt) { + case 'f': separator = optarg[0]; break; case 'v': verbosity++; break; case 'h': help(1); exit(1); case 's': steps = atoi(optarg); break;