|
|
|
@ -77,7 +77,7 @@ IRC de Freenode. |
|
|
|
|
|
|
|
|
|
\textbf{Attention !} ce document commence par une bonne rafale |
|
|
|
|
de technique parfois hardue\footnote{gni?}. |
|
|
|
|
Vous avez parfaitement le droit de auter directement à |
|
|
|
|
Vous avez parfaitement le droit de sauter directement à |
|
|
|
|
la page \pageref{outils} pour quelque chose de plus concret. |
|
|
|
|
|
|
|
|
|
% ------------------------------------------------------------------- |
|
|
|
@ -194,7 +194,7 @@ lesquels sont décrits en page \pageref{outils}. |
|
|
|
|
% ------------------------------------------------------------------- |
|
|
|
|
\section{Installation} |
|
|
|
|
|
|
|
|
|
\textit{Attention, ça devient un peu gore.} |
|
|
|
|
\textit{Attention, ça devient un peu gore. Myrys, punk, toussa\dots} |
|
|
|
|
|
|
|
|
|
\subsection{Prérequis} |
|
|
|
|
|
|
|
|
@ -209,6 +209,8 @@ comme \textsc{gnu}/make\index{make}. |
|
|
|
|
Une connaissance de base de l'utilisation du shell\index{shell} |
|
|
|
|
et de l'écriture de Makefile's sera un plus. |
|
|
|
|
|
|
|
|
|
Il faut aussi savoir où trouver le code. |
|
|
|
|
|
|
|
|
|
\subsection{Compilation} |
|
|
|
|
|
|
|
|
|
Un script \texttt{build.sh} permet de construire approximativement |
|
|
|
@ -474,6 +476,8 @@ de pixel flottant. |
|
|
|
|
\subsection{Géométrie}\index{géométrie}\label{geometrie} |
|
|
|
|
|
|
|
|
|
Très prochainement, le retour du blitter\index{blitter}. |
|
|
|
|
Et pour attendre, un truc improbable, voire même |
|
|
|
|
inutile. |
|
|
|
|
|
|
|
|
|
\begin{lstlisting} |
|
|
|
|
/* module funcs/geometry.c */ |
|
|
|
@ -485,6 +489,15 @@ contenir d'image, et doit être effacé avec un bon |
|
|
|
|
\texttt{memset(\&result, 0, sizeof(FloatImg));} bien senti. |
|
|
|
|
Et le résultat est très moyen : il n'y a pas d'interpolation. |
|
|
|
|
|
|
|
|
|
\begin{lstlisting} |
|
|
|
|
/* module funcs/geometry.c */ |
|
|
|
|
int fimg_extract_0(FloatImg *src, FloatImg *dst, int x, int y); |
|
|
|
|
\end{lstlisting} |
|
|
|
|
|
|
|
|
|
Contrairement à la fonction précédente, celle-ci demande absolument une |
|
|
|
|
image de destination initialisée aux dimensions (largeur et hauteur) |
|
|
|
|
désirées. |
|
|
|
|
|
|
|
|
|
% ---------------------------------- |
|
|
|
|
|
|
|
|
|
\subsection{Exportation \& Importation}\index{export}\label{export} |
|
|
|
@ -532,12 +545,13 @@ 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. |
|
|
|
|
On peut aussi songer à l'export de metadatas. |
|
|
|
|
|
|
|
|
|
\begin{lstlisting} |
|
|
|
|
int fimg_save_as_png(FloatImg *src, char *outname, int flags); |
|
|
|
|
\end{lstlisting} |
|
|
|
|
|
|
|
|
|
Tous les flags doivent être à zéro. |
|
|
|
|
Tous les flags doivent être à zéro. Sinon, ça foire parfois. |
|
|
|
|
|
|
|
|
|
\subsubsection{Vers/depuis TIFF}\index{TIFF} |
|
|
|
|
|
|
|
|
@ -549,7 +563,8 @@ To be done\index{XXX} |
|
|
|
|
|
|
|
|
|
\subsubsection{Vers FITS}\index{FITS} |
|
|
|
|
|
|
|
|
|
Essentiellement des images d'astronomie. |
|
|
|
|
Ce format est essentiellement utilisé pour stocker des images |
|
|
|
|
d'astronomie. |
|
|
|
|
|
|
|
|
|
To be done\index{XXX} |
|
|
|
|
|
|
|
|
@ -571,9 +586,9 @@ 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. |
|
|
|
|
Les extensions actuellement connues sont : fimg, png, pnm et tiff. |
|
|
|
|
|
|
|
|
|
To be continued\index{XXX} |
|
|
|
|
To be continued\index{XXX}\dots |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\subsection{Effets}\index{sfx} |
|
|
|
@ -594,13 +609,45 @@ int fimg_killcolors_b(FloatImg *fimg, float fval); |
|
|
|
|
|
|
|
|
|
Pour commencer, il faut que je réfléchisse au traitement |
|
|
|
|
des bordures des images. |
|
|
|
|
Ensuite que je débuggue\index{bug} cette fonction~: |
|
|
|
|
Ensuite que je débuggue\index{bug} ces deux fonctions~: |
|
|
|
|
|
|
|
|
|
\begin{lstlisting} |
|
|
|
|
int fimg_lissage_2x2(FloatImg *img); |
|
|
|
|
int fimg_killborders(FloatImg *img); |
|
|
|
|
\end{lstlisting} |
|
|
|
|
|
|
|
|
|
To be continued\index{XXX}\dots |
|
|
|
|
Bon, oké, ça marche ? Passons à l'tape suivante. |
|
|
|
|
La convolution avec une matrice 3x3, c'est possible. |
|
|
|
|
Et pas trop compliqué à faire. |
|
|
|
|
Bon, il reste le souci avec les bordures, souci qui ne peut |
|
|
|
|
être que temporaire, mais ésotérique à fixer. |
|
|
|
|
|
|
|
|
|
Passons maintenant aux choses sérieuses, et définissons la |
|
|
|
|
description d'un filtre 3x3. |
|
|
|
|
|
|
|
|
|
\begin{verbatim} |
|
|
|
|
typedef struct { |
|
|
|
|
float matrix[9]; |
|
|
|
|
float mult; |
|
|
|
|
float offset; |
|
|
|
|
} FimgFilter3x3; |
|
|
|
|
\end{verbatim} |
|
|
|
|
|
|
|
|
|
L'usage des champs \texttt{mult} et \texttt{offset} n'est pas |
|
|
|
|
clairement défini. Le prototype de la fonction de filtrage |
|
|
|
|
non plus, mais assez simpe quand même. Source et destination |
|
|
|
|
ne peuvent désigner la même image, et le champ \texttt{matrix} |
|
|
|
|
du filtre doit contenir des valeurs cohérentes. |
|
|
|
|
|
|
|
|
|
\begin{verbatim} |
|
|
|
|
int fimg_filter_3x3(FloatImg *src, FloatImg *dst, FimgFilter3x3 *filtr) |
|
|
|
|
\end{verbatim} |
|
|
|
|
|
|
|
|
|
Comme dans la plupart des cas, la gestion des valeurs négatives |
|
|
|
|
de pixel est laissé au hasard. Quoique, il doit bien exister |
|
|
|
|
quelques solutions de contournement : clamping ou shift ? |
|
|
|
|
|
|
|
|
|
\textsl{To be continued\index{XXX}\dots} |
|
|
|
|
|
|
|
|
|
% ---------------------------------- |
|
|
|
|
|
|
|
|
@ -787,6 +834,8 @@ La véracité mathématique n'est pas garantie. Et n'oubliez pas que |
|
|
|
|
les valeurs négatives peuvent être la cause de \textsl{glitches} |
|
|
|
|
de qualitay. |
|
|
|
|
|
|
|
|
|
% ------------------------- |
|
|
|
|
|
|
|
|
|
\subsection{fimg2png, fimg2pnm, fimg2tiff} |
|
|
|
|
\index{fimg2png}\label{fimg2png} |
|
|
|
|
\index{fimg2pnm}\label{fimg2pnm} |
|
|
|
@ -797,7 +846,7 @@ vers des choses plus directement utilisables. À condition que le |
|
|
|
|
code soit écrit et documenté. |
|
|
|
|
|
|
|
|
|
D'un autre coté, écrire un greffon d'import/export pour |
|
|
|
|
Gimp\index{Gimp} ou Imagemagick\index{Imagemagick} ou Krita\index{Krita} |
|
|
|
|
Gimp\index{Gimp} ou ImageMagick\index{ImageMagick} ou Krita\index{krita} |
|
|
|
|
ne devrait pas être trop difficile. Des volontaires ? |
|
|
|
|
|
|
|
|
|
\textsl{D'ailleurs, pourquoi $n$ logiciels indépendants alors q'un |
|
|
|
@ -821,7 +870,7 @@ C'est par ces frottements de techniques ayant du sens que les |
|
|
|
|
choses seront acquises. |
|
|
|
|
|
|
|
|
|
\begin{itemize} |
|
|
|
|
\item Import/export au format \textsc{tiff}\index{tiff}. |
|
|
|
|
\item Import/export au format \textsc{tiff}\index{TIFF}. |
|
|
|
|
\item Remplacer le « fait-maison » par \textsc{libnetpnm}\index{pnm}. |
|
|
|
|
\textsl{[en cours]}. |
|
|
|
|
\item Compléter les traitements mathémathiques (eg le gamma\index{gamma}). |
|
|
|
@ -1094,6 +1143,39 @@ l'\textsc{api} de \textsc{v4l2}, et donc, que ce que raconte |
|
|
|
|
ce logiciel doit être pris avec des pincettes. En particulier |
|
|
|
|
la liste des résolutions disponibles. |
|
|
|
|
|
|
|
|
|
% ------------------------------------------------------------------- |
|
|
|
|
\section{À l'extérieur} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\subsection{ImageMagick}\index{ImageMagick} |
|
|
|
|
|
|
|
|
|
Pour afficher notre format .fimg exotique avec \texttt{display}, vous |
|
|
|
|
devez mettre ce bout de XML\index{XML} dans le fichier |
|
|
|
|
\texttt{\$HOME/.magick/delegates.xml}~: |
|
|
|
|
|
|
|
|
|
\begin{verbatim} |
|
|
|
|
<?xml version="1.0" encoding="UTF-8"?> |
|
|
|
|
<delegatemap> |
|
|
|
|
<delegate decode="fimg" command="fimg2png '%i' '%o'"/> |
|
|
|
|
</delegatemap> |
|
|
|
|
\end{verbatim} |
|
|
|
|
|
|
|
|
|
C'est juste un hack rapide, qui ne fonctionne pas très bien avec |
|
|
|
|
d'autres commande de IM, comme identify, qui a tendance à |
|
|
|
|
raconter un peu n'importe quoi... Je compte donc sur le bouquin |
|
|
|
|
de \textsl{Brunus} pour avancer... |
|
|
|
|
|
|
|
|
|
\subsection{Gimp}\index{Gimp} |
|
|
|
|
|
|
|
|
|
Mmmmm... Ça semble un peu plus compliqué. D'un autre coté, il |
|
|
|
|
faut faire ça en \textbf{C}, ce qui ne peut être négatif. |
|
|
|
|
|
|
|
|
|
\subsection{Et encore ?}\index{krita}\index{geeqie} |
|
|
|
|
|
|
|
|
|
Il y a d'autres logiciels pour lesquels écrire une fonction d'importation |
|
|
|
|
serait bien~: \textsl{Geeqie}, un visualiseur d'image fort pratique, ou |
|
|
|
|
\textsl{Krita} qui semble avoir les faveurs de dessinateurs de talent. |
|
|
|
|
|
|
|
|
|
% ------------------------------------------------------------------- |
|
|
|
|
\section{Et pour la suite ?} |
|
|
|
|
|
|
|
|
|