Compare commits

..

2 Commits

Author SHA1 Message Date
tth
4872ec698c less bug, and a new effect 2021-04-20 12:06:19 +02:00
tth
1f03709b6c minor tweaks 2021-04-19 11:01:09 +02:00
2 changed files with 45 additions and 21 deletions

View File

@ -10,7 +10,7 @@
% \lstset{frame=single} % dessin d'un cadre autour du listing % \lstset{frame=single} % dessin d'un cadre autour du listing
\lstset{basicstyle=\ttfamily\small} \lstset{basicstyle=\ttfamily\small}
\lstset{aboveskip=0.222em,belowskip=0.222em} \lstset{aboveskip=0.1em,belowskip=0.1em}
\usepackage{babel} % ? \usepackage{babel} % ?
@ -50,7 +50,7 @@
\begin{document} \begin{document}
\maketitle \maketitle
\section{Image flottante ?} \section*{Image flottante ?}
Mais de quoi parle-t-on exactement ? Mais de quoi parle-t-on exactement ?
@ -89,9 +89,9 @@ la page \pageref{outils} pour quelque chose de plus concret.
\pagebreak \pagebreak
\setlength \parskip {0.40em} \setlength \parskip {0.40em}
% \layout \pagebreak \layout \pagebreak
% ------------------------------------------------------------------- % ===================================================================
\section{Théorie}\index{théorie} \section{Théorie}\index{théorie}
@ -128,7 +128,7 @@ Il est très difficle d'imaginer une lumière négative. Sauf peut-être
si nous songeons à des coefficients d'absorption, ou un canal si nous songeons à des coefficients d'absorption, ou un canal
\textsl{alpha} qui inverserait les valeurs ? \textsl{alpha} qui inverserait les valeurs ?
% ------------------------------------------------------------------- % ===================================================================
\section{Premier exemple}\index{exemple}\label{exemple} \section{Premier exemple}\index{exemple}\label{exemple}
@ -203,7 +203,7 @@ d'autres exemples de mise en œuvre des fonctions disponibles
sous formes d'outils en ligne de commande, sous formes d'outils en ligne de commande,
lesquels sont décrits en page \pageref{outils}. lesquels sont décrits en page \pageref{outils}.
% ------------------------------------------------------------------- % ===================================================================
\section{Installation} \section{Installation}
Sauf indications contraires, ces instructions se réfèrent à Sauf indications contraires, ces instructions se réfèrent à
@ -734,7 +734,7 @@ int fimg_lissage_2x2(FloatImg *img);
int fimg_killborders(FloatImg *img); int fimg_killborders(FloatImg *img);
\end{lstlisting} \end{lstlisting}
Bon, oké, ça marche ? Passons à l'tape suivante. Bon, oké, ça marche ? Passons à l'étape suivante.
La convolution avec une matrice 3x3, c'est possible. La convolution avec une matrice 3x3, c'est possible.
Et pas trop compliqué à faire. Et pas trop compliqué à faire.
Bon, il reste le souci avec les bordures, souci qui ne peut Bon, il reste le souci avec les bordures, souci qui ne peut
@ -753,7 +753,7 @@ typedef struct {
L'usage des champs \texttt{mult} et \texttt{offset} n'est pas L'usage des champs \texttt{mult} et \texttt{offset} n'est pas
clairement défini. Le prototype de la fonction de filtrage clairement défini. Le prototype de la fonction de filtrage
non plus, mais assez simpe quand même. Source et destination non plus, mais assez simple quand même. Source et destination
ne peuvent désigner la même image, et le champ \texttt{matrix} ne peuvent désigner la même image, et le champ \texttt{matrix}
du filtre doit contenir des valeurs cohérentes. du filtre doit contenir des valeurs cohérentes.
@ -817,7 +817,7 @@ de cohérence sur les dimensions des deux images, malgré l'existence
de fonctions prévues à cet effet.. de fonctions prévues à cet effet..
% ------------------------------------------------------------------- % ===================================================================
\section{Les outils}\label{outils} \section{Les outils}\label{outils}
\textsf{3615mavie} : sur des projets comme celui-ci, qui travaillent \textsf{3615mavie} : sur des projets comme celui-ci, qui travaillent
@ -861,7 +861,6 @@ devra être donné avec l'option \texttt{-k F.F} avec une valeur par défaut
\item [hdeg/vdeg:] dégradé du noir au blanc (relatif à \texttt{-k}). \item [hdeg/vdeg:] dégradé du noir au blanc (relatif à \texttt{-k}).
\end{description} \end{description}
% --------------------- % ---------------------
\subsection{png2fimg}\index{png2fimg}\label{png2fimg} \subsection{png2fimg}\index{png2fimg}\label{png2fimg}
@ -1008,9 +1007,9 @@ cumulator options :
\end{verbatim} \end{verbatim}
Le nom par défaut du fichier résultant est \texttt{out.fimg}. Le nom par défaut du fichier résultant est \texttt{out.fimg}.
L'exportation "multiformat" est pour bientôt. L'exportation « multiformat » est pour bientôt.
% ------------------------------------------------------------------- % ===================================================================
\section{TODO}\index{TODO}\label{TODO}\ \section{TODO}\index{TODO}\label{TODO}\
\index{XXX} \index{XXX}
@ -1030,7 +1029,7 @@ choses seront acquises.
\item Vérifier le gestion des images mono-canal. \item Vérifier le gestion des images mono-canal.
\end{itemize} \end{itemize}
% ------------------------------------------------------------------- % ===================================================================
\section{Exemples pour yusers}\index{exemple} \section{Exemples pour yusers}\index{exemple}
Nous allons \textsl{essayer d'improviser} un exemple presque réel, Nous allons \textsl{essayer d'improviser} un exemple presque réel,
@ -1209,7 +1208,7 @@ C'est juste une POC\index{POC}, et une implémentation bien plus
complète écrite en \textbf{C}\index{C} est déja en chantier, complète écrite en \textbf{C}\index{C} est déja en chantier,
avec une complexité prévue à un niveau assez réjouissant. avec une complexité prévue à un niveau assez réjouissant.
% ------------------------------------------------------------------- % ===================================================================
\section{Video for Linux}\index{v4l2} \section{Video for Linux}\index{v4l2}
Donc, maintenant, nous savons un peu tripoter ces images flottantes. Donc, maintenant, nous savons un peu tripoter ces images flottantes.
@ -1306,7 +1305,7 @@ la liste des résolutions disponibles.
Ajustement \textsl{Brightness Contrast Saturation Hue\dots} Ajustement \textsl{Brightness Contrast Saturation Hue\dots}
% ------------------------------------------------------------------- % ===================================================================
\section{À l'extérieur} \section{À l'extérieur}
@ -1370,14 +1369,23 @@ On peut d'abord penser faire une moyenne (ou la somme, en fait) de toutes
ces images. Mais ce n'est qu'une façon déguisée de faire du cumul. ces images. Mais ce n'est qu'une façon déguisée de faire du cumul.
C'est à ce moment que nous changeons l'axe de vue du défi. C'est à ce moment que nous changeons l'axe de vue du défi.
\subsection{textsl{moving average}} Par ailleurs, il m'a semblé pertinent d'inclure dans le projet une
foultitude d'effets spéciaux.
Moyenne mobile. \subsection{\textsl{moving average}}
\texttt{./fonderie} : Basé sur la moyenne mobile.
\subsection{Interpolator}\index{interpolator} \subsection{Interpolator}\index{interpolator}
Juste des calculs pas si simple que ça. Juste des calculs pas si simple que ça.
\subsection{Singlepass}
Ce programme \texttt{singlepass} prétend vous permettre de tester
tous les filtres disponibles, dont on peut avoir la liste
avec l'option \texttt{-L}\footnote{liste hélas peu machinable.}
\subsection{Déviance} \subsection{Déviance}
Là, nous tombons dans la troiD de haut niveau, avec plein de maths Là, nous tombons dans la troiD de haut niveau, avec plein de maths

View File

@ -22,7 +22,7 @@ typedef struct {
enum fxid { Fx_cos01=5, Fx_cos010, Fx_pow2, Fx_sqrt, Fx_gray0, Fx_halfsz0, enum fxid { Fx_cos01=5, Fx_cos010, Fx_pow2, Fx_sqrt, Fx_gray0, Fx_halfsz0,
Fx_rot90, Fx_cmixa, Fx_desat, Fx_ctr2x2, Fx_norm, Fx_rot90, Fx_cmixa, Fx_desat, Fx_ctr2x2, Fx_norm,
Fx_xper, Fx_binarize, Fx_hilight_R }; Fx_xper, Fx_binarize, Fx_trinarize,Fx_hilight_R };
Fx fx_list[] = { Fx fx_list[] = {
{ "cos01", Fx_cos01, 0, 1 }, { "cos01", Fx_cos01, 0, 1 },
@ -37,7 +37,8 @@ Fx fx_list[] = {
{ "desat", Fx_desat, 0, 1 }, { "desat", Fx_desat, 0, 1 },
{ "ctr2x2", Fx_ctr2x2, 0, 1 }, { "ctr2x2", Fx_ctr2x2, 0, 1 },
{ "norm", Fx_norm, 0, 1 }, { "norm", Fx_norm, 0, 1 },
{ "binarize", Fx_binarize, 0, 0 }, { "binarize", Fx_binarize, 0, 1 },
{ "trinarize", Fx_trinarize, 0, 1 },
{ "hilightr", Fx_hilight_R, 0, 1 }, { "hilightr", Fx_hilight_R, 0, 1 },
{ NULL, 0, 0, 0 } { NULL, 0, 0, 0 }
}; };
@ -94,6 +95,7 @@ return 0;
static void help(int lvl) static void help(int lvl)
{ {
Fx *fx; Fx *fx;
int foo;
printf("-- fimg special effects -- %s %s --\n", __DATE__, __TIME__); printf("-- fimg special effects -- %s %s --\n", __DATE__, __TIME__);
puts("usage:"); puts("usage:");
@ -105,8 +107,13 @@ puts("\t-v\tincrease verbosity");
puts("effects:"); puts("effects:");
printf("\t"); printf("\t");
foo = 0;
for (fx=fx_list; fx->name; fx++) { for (fx=fx_list; fx->name; fx++) {
printf("%s ", fx->name); foo += printf("%s ", fx->name);
if (foo > 55) {
printf("\n\t");
foo = 0;
}
} }
puts(""); puts("");
fimg_print_version(1); fimg_print_version(1);
@ -140,7 +147,7 @@ if (fx_list[fxidx].flags & 1) {
} }
} }
else { else {
/* XXX */ fprintf(stderr, "%s: ???\n", __func__); /* XXX */
memset(&dest, 0, sizeof(dest)); memset(&dest, 0, sizeof(dest));
} }
@ -187,6 +194,10 @@ switch (action) {
fimg_copy_data(&src, &dest); fimg_copy_data(&src, &dest);
foo = fimg_binarize(&dest, 0); foo = fimg_binarize(&dest, 0);
break; break;
case Fx_trinarize:
fimg_copy_data(&src, &dest);
foo = fimg_trinarize(&dest, 0);
break;
case Fx_hilight_R: case Fx_hilight_R:
foo = fimg_highlight_color(&src, &dest, 'R', 1.333); foo = fimg_highlight_color(&src, &dest, 'R', 1.333);
break; break;
@ -203,6 +214,11 @@ if (foo) {
return foo; return foo;
} }
fimg_destroy(&src);
if (dest.type) {
fimg_destroy(&dest);
}
return 0; return 0;
} }
/* --------------------------------------------------------------------- */ /* --------------------------------------------------------------------- */