diff --git a/build.sh b/build.sh index c5571b4..ed20ad0 100755 --- a/build.sh +++ b/build.sh @@ -27,10 +27,10 @@ build v4l2 # ------------------------------------------------------------------ -echo '*************************' make +# ------------------------------------------------------------------ diff --git a/doc/the_floatimg_hack.tex b/doc/the_floatimg_hack.tex index 714bcfd..4fd0b60 100644 --- a/doc/the_floatimg_hack.tex +++ b/doc/the_floatimg_hack.tex @@ -1,4 +1,4 @@ -\documentclass[a4paper,11pt]{article} +\documentclass[a4paper,10pt]{article} % \listfiles % pour le debug @@ -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 diff --git a/lib/fimg-core.c b/lib/fimg-core.c index 325ff63..37bf94c 100644 --- a/lib/fimg-core.c +++ b/lib/fimg-core.c @@ -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;