Compare commits

..

No commits in common. "db715485a2ae84bd362815d8fc5d8d0ca5268def" and "a78d6c2a75ac1a8702832ced960fb2ad30101267" have entirely different histories.

3 changed files with 22 additions and 71 deletions

View File

@ -7,7 +7,7 @@ gnuplot << __EOF__
set term latex
set output "$OUT"
set title "COS01"
set title "COS010"
plot \
[0:1] [0:1] \

View File

@ -110,10 +110,9 @@ basiques en C, gérant la structure des données d'image en mémoire
et sur disque. Ça a été imaginé de façon presque empirique,
mais nous sommes tous là pour améliorer les choses, dans
la mesure de nos moyens.
Nous allons donc directement rentrer au cœur du problème,
en écrivant quelques lignes de code.
Nous allons donc directement rentrer au cœur du problème.
Pour commencer par quelque chose de simple,
Pour commencer par quelques chose de simple,
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
@ -296,9 +295,9 @@ pas être la même chose dans l'avenir.
\subsection{Les fondations}\index{lib/}
La première chose que nous devons absolument voir est la gestion
dynamique de la mémoire qui sera occupée par tous ces pixels flottants,
ce qui est un sujet parfois délicat\footnote{GC or not GC ?}.
La première chose à voir est la gestion dynamique de la mémoire occupée
par tous ces pixels flottants, ce est un sujet parois
délicat\footnote{GC}.
Elle est donc faite, à la base, par ces deux fonctions~:
\begin{verbatim}
@ -307,7 +306,7 @@ int fimg_destroy(FloatImg *fimg);
\end{verbatim}
L'appelant doit lui-même gérer le descripteur d'image (une structure
C décrite plus haut) en le considérant comme un type semi-opaque dont
C décrite plus haur) en le considérant comme un type semi-opaque dont
la forme peut varier. Certains membres de cette structure sont
documentés dans ce document, et les autres sont dangereux à
toucher. Les types d'images actuellement gérés sont les trois grands
@ -327,27 +326,18 @@ Recharger une image depuis un fichier nécessite que celle-ci et
l'image de destination en mémoire
ait précisément les mêmes caractéristiques
(taille, type...), donc l'image en ram doit être
pré-allouée. On peut connaitre ces valeurs en appelant
\texttt{int fimg\_fileinfos(char *fname, int datas[3])}.
pré-allouée. Mias comment peut-on connaitre ces valeurs ?
\begin{verbatim}
int fimg_fileinfos(char *fname, int datas[3]);
\end{verbatim}
Si tout s'est bien passé (valeur retournée égale à 0),
on va trouver la largeur dans \texttt{datas[0]},
la hauteur dans \texttt{datas[1]} et le type dans
\texttt{datas[2]}\footnote{La fonction
\texttt{fimg\_type\_is\_valid(int type)} peut vous aider}.
Je sais aussi que certains d'entre vous aiment la facilité, aussi
je vais vous révéler l'existence d'un nouveau truc bien plus
simple, une fonction qui enchaine ces deux actions
(allocation, puis lecture), et s'utilise
comme ça :
\begin{verbatim}
FloatImg head;
memset(&head, 0, sizeof(FloatImg));
foo = fimg_create_from_dump("lena.fimg", &head);
\end{verbatim}
la hauteur dans \texttt{datas[1]} et le type dans \texttt{datas[2]}.
La fonction \texttt{fimg\_type\_is\_valid(int type)} peut
vous aider.
% _________
@ -446,26 +436,22 @@ Et le résultat est très moyen : il n'y a pas d'interpolation.
% ----------------------------------
\subsection{Exportation \& Importation}\index{export}\label{export}
\subsection{Exportation}\index{export}\label{export}
Notre format de fichier étant totalement inconnu, il nous
faut bien exporter nos images en quelque chose de plus
connu. Bien entendu, c'est toujours affaire de compromis
entre précision de valeurs et taille des fichiers.
Et dans le sens inverse, il serait bien de savoir importer
le monde extérieur dans nos sombres caves à pixel.
Il faut quand même reconnaitre que c'est un peu la jungle dans les
formats de fichiers d'image, ce qui explique le retard
dans ce domaine\dots
Il faut aussi reconnaitre que c'est un peu la jungle dans les
formats de fichiers d'image\dots
\subsubsection{Vers PNM}\index{PNM}
Nous avons ici 16 bits par composante, mais au prix
d'une taille énorme sur les fichiers. D'un autre coté,
d'une taille énorme sur les fichiers. D'autre coté,
l'utilisation du codage \textsc{ascii}\index{ascii}
(alors qu'on pourrait mettre du binaire, plus compact) y est
pour quelque chose.
(alors qu'on pourrait mettre du binaire, plus compact) y est pour quelque chose.
\begin{verbatim}
int fimg_save_as_pnm(FloatImg *head, char *fname, int flags);
@ -477,58 +463,29 @@ Le bit \texttt{0} du paramètre \texttt{flags} mis à \texttt{1} demande
Et si il est à zéro, c'est la fonction de recherche de valeur
maximale (cf page \pageref{contraste}) qui est utilisée.
Le bit \texttt{1} permettra bientôt\index{vaporware} de demander
l'enregistrement de métadonnées\index{metadata} pertinentes, telle
que l'epochtime de l'enregistrement.
Les autres bits ne sont pas utilisés et doivent être à zéro.
\subsubsection{Vers PNG}\index{PNG}
Actuellement, on peut enregistrer uniquement en mode RGB, 8 bits par composante,
mais on a quand même une bonne compression, ça compense.
J'utilise \textsl{libpnglite} avec qui j'ai un peu de mal à suivre.
Mais je me soigne. Le mode 16 bits va bientôt arriver.
\begin{verbatim}
int fimg_save_as_png(FloatImg *src, char *outname, int flags);
\end{verbatim}
\subsubsection{Vers TIFF}\index{TIFF}
Le format canonique de la PAO\index{PAO} du siècle dernier. Il permet
de gérer une foultitude de formats numériques. C'est aussi un format
classique proposé par les scanners corporates.
To be done\index{XXX}
\subsubsection{Vers FITS}\index{FITS}
Essentiellement des images d'astronomie.
To be done\index{XXX}
\subsection{Utilitaires}
Commençons par quelques petits trucs pour nous faciliter la vie
dans des domaines annexes,
tels que l'interprétation d'arguments dans la ligne de commande ou un
fichier de configuration.
\begin{verbatim}
int parse_WxH(char *str, int *pw, int *ph)
int parse_double(char *str, double *dptr)
int format_from_extension(char *fname)
\end{verbatim}
La fonction \texttt{int format\_from\_extension(char *fname)} examine un
nom defichier tel que \texttt{lena.xxx}, et retourne, si la partie
\texttt{xxx} un éventuel nombre positif, dont les valeurs sont dans floatimg.h
le valeureux.
Les extensions connues sont : fimg, png, pnm et tiff.
To be continued\index{XXX}
@ -547,8 +504,7 @@ int fimg_killcolors_b(FloatImg *fimg, float fval);
\subsection{Filtrages}
To be done\index{XXX}, et il faut que je réfléchisse au traitement
des bords d'image.
To be done\index{XXX}
% ----------------------------------

View File

@ -160,11 +160,6 @@ FimgFileHead filehead;
fprintf(stderr, ">>> %-25s ( '%s' %p )\n", __func__, fname, head);
#endif
/*
* may be we can crash coredump here if the head
* descriptor is not blank ?
*/
fp = fopen(fname, "r");
if (NULL==fp) {
perror(fname);