|
|
|
@ -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 |
|
|
|
|