doc about fimg2text + small patches

This commit is contained in:
tth 2021-04-24 15:18:06 +02:00
parent 5ac050fa10
commit 004f24689b
2 changed files with 69 additions and 4 deletions

View File

@ -995,17 +995,75 @@ ne devrait pas être trop difficile. Des volontaires ?
\textsl{D'ailleurs, pourquoi $N$ logiciels indépendants alors q'un \textsl{D'ailleurs, pourquoi $N$ logiciels indépendants alors q'un
seul devrait être nécessaire ?} 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} \subsection{fimg2gray}\index{fimg2gray}\label{fimg2gray}
Nous avons vu dans ce document que chaque image flottante pouvait 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} 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 à une abstraction linéaire mono-dimensionnelle, il existe une foultitude
de méthodes, toutes plus légitimes que les autres. de méthodes, toutes plus légitimes que les autres.
\index{procrastination} \index{procrastination}
Et face à l'incertitude du choix, j'ai reporté l'écriture de ce 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} \subsection{cumulfimgs}\index{cumulfimgs}\label{cumulfimgs}

View File

@ -90,6 +90,11 @@ fprintf(stderr, ">>> %25s ( '%s' '%s' %d )\n", __func__,
srcname, dstname, notused); srcname, dstname, notused);
#endif #endif
if (steps < 1) {
fprintf(stderr, "%s: steps MUST be > 0\n", __func__);
exit(1);
}
foo = fimg_fileinfos(srcname, infos); foo = fimg_fileinfos(srcname, infos);
if (foo) { if (foo) {
fprintf(stderr, "'%s' get dims -> %d\n", srcname, foo); fprintf(stderr, "'%s' get dims -> %d\n", srcname, foo);
@ -142,11 +147,13 @@ exit(0);
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
int foo, opt; int foo, opt;
int steps = 16; int steps = 1;
float norm_val = 222.0; /* < 0 : don't normalize */ 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) { switch(opt) {
case 'f': separator = optarg[0]; break;
case 'v': verbosity++; break; case 'v': verbosity++; break;
case 'h': help(1); exit(1); case 'h': help(1); exit(1);
case 's': steps = atoi(optarg); break; case 's': steps = atoi(optarg); break;