Browse Source

need more troll in the doc

master
tth 3 years ago
parent
commit
c097f6a64d
  1. 2
      build.sh
  2. 103
      doc/the_floatimg_hack.tex
  3. 1
      lib/fimg-core.c

2
build.sh

@ -27,10 +27,10 @@ build v4l2 @@ -27,10 +27,10 @@ build v4l2
# ------------------------------------------------------------------
echo '*************************'
make
# ------------------------------------------------------------------

103
doc/the_floatimg_hack.tex

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
\documentclass[a4paper,11pt]{article}
\documentclass[a4paper,10pt]{article}
% \listfiles % pour le debug
@ -24,17 +24,118 @@ @@ -24,17 +24,118 @@
\section{Image flottante ?}
De quoi parle-t-on exactement ?
\vspace{1em}
Traditionnellement, les valeurs des pixels dans les images
informatiques sont mémorisées sur 8 bits, un octet\index{octet},
soit 256 valeurs différentes.
Ceci dit, on trouve parfois des images codées sur 16 bits par
composante, mais c'est loin d'être le cas général.
J'ai donc souhaité aller plus loin, et coder chaque canal de
chaque pixel en virgule flottante sur 32bits, le type
\texttt{float}\index{float} du langage C.
% -------------------------------------------------------------------
\tableofcontents
\pagebreak
% -------------------------------------------------------------------
\section{Example}
Pour commencer,
nous allons créer une image RGB\index{RGB} complètement noire,
puis l'enregistrer dans un fichier \texttt{.fimg}\index{.fimg},
un format complètement inconnu, puisque je viens de l'inventer
à l'instant même.
Tout d'abord, nous devons déclarer et garnir quelques variables
pour gérer la machinerie interne.
\begin{verbatim}
int width = 640, height = 480;
char *fname * "exemple.fimg";
FloatImg fimg;
\end{verbatim}
Ensuite, nous enchainerons trois étapes : création de l'image
en mémoire centrale, initialisations des valeurs de pixel à 0.0,
et pour conclure, enregistrement dans un fichier.
\begin{verbatim}
foo = fimg_create(&fimg, width, height, 3);
if (foo) {
fprintf(stderr, "create floatimg -> %d\n", foo);
exit(1);
}
fimg_clear(&fimg);
foo = fimg_dump_to_file(&fimg, fname, 0);
if (foo) {
fprintf(stderr, "dump fimg -> %d\n", foo);
exit(1);
}
\end{verbatim}
Une fois ce code enrobé dans un \texttt{main()}, compilé et exécuté,
nous pouvons entrevoir, grâce au logiciel
\texttt{fimgstats} (voir page \pageref{fimgstats}),
le résultat sous forme de chiffres divers, et/ou inutiles~:
\begin{verbatim}
$ ./fimgstats quux.img
----------- numbers from 'quux.img' :
640 480 3 0x7f3718c4f010 0x7f3718d7b010 0x7f3718ea7010
surface 307200
mean values:
R 0.000000
G 0.000000
B 0.000000
A 0.000000
max value 0.000000
\end{verbatim}
% -------------------------------------------------------------------
\section{Mise en œuvre}
Pour le moment, la procédure d'installation est un peu rude,
pour ne pas dire clairement sommaire.
\vspace{1em}
Un script \texttt{build.sh} permet de construire approximativement
le bouzin. Il est loin d'être parfait.
% -------------------------------------------------------------------
\section{Les outils}
\textsl{3615mavie} : sur des projets comme celui-ci, qui travaillent
in-fine sur des objets que l'on peut considérer comme « physiques »,
il est important de passer à une utilisation
normale\footnote{Il y a une vie en dehors de git.} et construire
des trucs qui mettent en action le code primitif.
\vspace{1em}
\subsection{mkfimg}\index{mkfimg}\label{mkfimg}
Création d'un fichier contenant une image de teinte constante.
\subsection{fimgstats}\index{fimgstats}\label{fimgstats}
Affichage de quelques valeurs calculées à partir d'un fichier
\texttt{.fimg}\index{.fimg}.
% -------------------------------------------------------------------
\section{Video for Linux}\index{v4l2}
Donc, maintenant, nous savons un peu tripoter des images flottantes.
Et nous devons nous poser une question fondamentale\footnote{primitive ?}
sur la provenance de ces données prétendnat être des images.
% -------------------------------------------------------------------
\section{Et pour la suite ?}
% -------------------------------------------------------------------
\printindex

1
lib/fimg-core.c

@ -74,6 +74,7 @@ fprintf(stderr, ">>> %-25s ( %p %d %d %d )\n", __func__, fimg, w, h, t); @@ -74,6 +74,7 @@ fprintf(stderr, ">>> %-25s ( %p %d %d %d )\n", __func__, fimg, w, h, t);
if ( ! fimg_type_is_valid(t) ) {
return -2;
}
memset(fimg, 0, sizeof(FloatImg));
surface = w * h;

Loading…
Cancel
Save