Compare commits

..

No commits in common. "d23a35849a9fd02366c292b0a84d11aeae363219" and "2c1687f82b4d74e27315670ed39687a382460f96" have entirely different histories.

9 changed files with 22 additions and 70 deletions

View File

@ -3,7 +3,7 @@
Avec toutes ces fonctions disponibles et `grabvidseq`, nous Avec toutes ces fonctions disponibles et `grabvidseq`, nous
savons faire des images **floues**. L'étape suivante, les plus savons faire des images **floues**. L'étape suivante, les plus
pervers d'entre vous le savent déja, est celle de la création pervers d'entre vous le savent déja, est celle de la création
de **films flous** dans le domaine spatio-temporel. de **films flous** dans le domaine spacio-temporel.
À l'heure actuelle, il y a plusieurs programmes distincts. Le premier À l'heure actuelle, il y a plusieurs programmes distincts. Le premier
(fonderie) fait une moyenne mobile sur N images consécutives, (fonderie) fait une moyenne mobile sur N images consécutives,

View File

@ -21,38 +21,6 @@
*/ */
extern int verbosity; extern int verbosity;
/* -------------------------------------------------------------- */
/*
* nouveau Sun Jul 16 07:37:22 UTC 2023
*/
int poke_sup_rb_g(FloatImg *src, FloatImg *dst)
{
int idx, nbpix, foo;
#if DEBUG_LEVEL
fprintf(stderr, ">>> %s ( %p %p )\n", __func__, src, dst);
#endif
if ( (foo=fimg_images_not_compatible(src, dst)) )
{
fprintf(stderr, "%s: no compat %d\n", __func__, foo);
return foo;
}
nbpix = src->width * src->height;
fprintf(stderr, "%s work on %d pixels\n", __func__, nbpix);
for (idx=0; idx<nbpix; idx++) {
dst->R[idx] = src->R[idx];
dst->B[idx] = src->B[idx];
if (dst->R[idx] > dst->B[idx])
dst->G[idx] = dst->R[idx];
else
dst->G[idx] = dst->B[idx];
}
return 0;
}
/* -------------------------------------------------------------- */ /* -------------------------------------------------------------- */
/* nouveau 14 mai 2022 rue Ernest Renan */ /* nouveau 14 mai 2022 rue Ernest Renan */

View File

@ -7,7 +7,6 @@ int graylevel2popcolors(FloatImg *src, FloatImg *dst, int k);
int incrustation_vignette(FloatImg *src, FloatImg *dst, int k); int incrustation_vignette(FloatImg *src, FloatImg *dst, int k);
int poke_sup_rb_g(FloatImg *src, FloatImg *dst);
int trinitron(FloatImg *pimg, int notused); int trinitron(FloatImg *pimg, int notused);

View File

@ -40,7 +40,7 @@ double debut, fin;
foo = fimg_create_from_dump(fIname, &image); foo = fimg_create_from_dump(fIname, &image);
if (foo) { if (foo) {
fprintf(stderr, "%s: err %d create from dump\n", __func__, foo); fprintf(stderr, "err %d create image\n", foo);
exit(1); exit(1);
} }
@ -73,6 +73,8 @@ return 0;
foo = essayer_single("capture/???42.fimg", "/tmp/x8/", STK); foo = essayer_single("capture/???42.fimg", "/tmp/x8/", STK);
fprintf(stderr, "essayer single -> %d\n", foo); fprintf(stderr, "essayer single -> %d\n", foo);
*/ */
int essayer_single(char *globpattern, char *destdir, int chain) int essayer_single(char *globpattern, char *destdir, int chain)
{ {
@ -159,14 +161,14 @@ puts("\t-s\tdo single test");
exit(0); exit(0);
} }
/* ----------------------------------------------------------- */ /* ----------------------------------------------------------- */
int experiment(char *fname) int experiment(void)
{ {
int foo; int foo;
FloatImg image, dest; FloatImg image, dest;
fprintf(stderr, "----- EXPERIMENT on '%s' -----\n", fname); fprintf(stderr, "--------- EXPERIMENT ------------\n");
foo = fimg_create_from_dump(fname, &image); foo = fimg_create_from_dump("mire.fimg", &image);
if (foo) { if (foo) {
fprintf(stderr, "%s: err %d on create_from_dump\n", fprintf(stderr, "%s: err %d on create_from_dump\n",
__func__, foo); __func__, foo);
@ -175,8 +177,8 @@ if (foo) {
foo = fimg_clone(&image, &dest, 0); foo = fimg_clone(&image, &dest, 0);
foo = poke_sup_rb_g(&image, &dest); foo = graylevel2popcolors(&image, &dest, 0);
fprintf(stderr, "poke sup rb g --> %d\n", foo); fprintf(stderr, "POP COLOR- -> %d\n", foo);
fimg_export_picture(&dest, "foo.png", 0); fimg_export_picture(&dest, "foo.png", 0);
@ -228,7 +230,7 @@ if (foo) {
} }
if (do_xper) { if (do_xper) {
experiment(infile); experiment();
return 0; return 0;
} }
if (do_single) { if (do_single) {

View File

@ -53,8 +53,6 @@
\section*{Une image flottante ?} \section*{Une image flottante ?}
\textsl{Back in a far past part of history.}
\textsl{Mais de quoi parle-t-on exactement ?} \textsl{Mais de quoi parle-t-on exactement ?}
% XXX XXX XXX\vspace{1em} % XXX XXX XXX\vspace{1em}
@ -81,12 +79,7 @@ IRC de \textsl{libera.chat}.
\textbf{Attention !} ce document commence par une bonne rafale \textbf{Attention !} ce document commence par une bonne rafale
de technique parfois \textsl{hardue}\footnote{hard + ardue = private de technique parfois \textsl{hardue}\footnote{hard + ardue = private
joke Usenet}, avec des pointeurs dedans, mais vous êtes déja joke Usenet}, avec des pointeurs dedans.
au courant.
Le pointeur, c'est bien, c'est comme le doigt sur les écrans
de zombiephones, ça sert juste à dire «~C'est là !~», c'est
donc gravement utile, mais parfois, le doigt glisse.
Et là, tout peut arriver.
Vous avez parfaitement le droit de sauter directement à Vous avez parfaitement le droit de sauter directement à
la page \pageref{outils} pour quelque chose de plus concret. la page \pageref{outils} pour quelque chose de plus concret.
@ -517,7 +510,7 @@ Si la valeur retournée est différente de 0, c'est que quelque
chose s'est probablement mal passé. chose s'est probablement mal passé.
Certains messages sont parfois explicites. Mais parfois non. Certains messages sont parfois explicites. Mais parfois non.
Quand aux valeurs retournées en cas d'erreur, c'est le désordre Quand aux valeurs retournées en cas d'erreur, c'est le désordre
intégral\footnote{Un vrai désastre, même...}. intégral.
% _________ % _________
@ -1403,7 +1396,7 @@ le premier pouvant salement brotcher une image, et le second capable de
mélanger harmonieusement deux images, la balance est équilibrée. mélanger harmonieusement deux images, la balance est équilibrée.
Il s'agit donc d'un petit programme écrit en Bash\index{bash}, un langage Il s'agit donc d'un petit programme écrit en Bash\index{bash}, un langage
dont la connaissance est, pour moi, indispensable à qui veut faire des dont la connaissance est, pour moi, indispendable à qui veut faire des
images kitchies\index{kitchy}. Mais ne vous inquiétez pas, c'est en images kitchies\index{kitchy}. Mais ne vous inquiétez pas, c'est en
fait assez simple à comprendre. Et comprendre, c'est apprendre. fait assez simple à comprendre. Et comprendre, c'est apprendre.
@ -1632,12 +1625,10 @@ devez mettre ce bout de XML\index{XML} dans le fichier
\end{lstlisting} \end{lstlisting}
C'est juste un hack rapide, qui ne fonctionne pas très bien avec C'est juste un hack rapide, qui ne fonctionne pas très bien avec
d'autres commande de IM, comme \texttt{identify}\index{identify}, d'autres commande de IM, comme identify, qui a tendance à
qui a tendance à
raconter un peu n'importe quoi, puisqu'elle se base sur le raconter un peu n'importe quoi, puisqu'elle se base sur le
résultat de la conversion. résultat de la conversion.
Je compte donc sur le bouquin de \textsl{Brunus}\index{Brunus} Je compte donc sur le bouquin de \textsl{Brunus} pour avancer\dots
pour avancer\dots
\subsection{Gimp}\index{Gimp} \subsection{Gimp}\index{Gimp}
@ -1671,7 +1662,7 @@ Bon courage pour toutes les explorer, voire même juste les comprendre.
Il y a d'autres logiciels pour lesquels écrire une fonction d'importation Il y a d'autres logiciels pour lesquels écrire une fonction d'importation
serait bien~: \textsl{Geeqie}, un visualiseur d'image fort pratique, ou serait bien~: \textsl{Geeqie}, un visualiseur d'image fort pratique, ou
\textsl{Krita} qui semble avoir les faveurs de \textsl{Krita} qui semble avoir les faveurs de
dessinateurs de talent. dessinateurs de talent\footnote{Oui, David, c'est à toi que je pense.}.
Ce qui nous conduit à une question importante~: quels sont les logiciels Ce qui nous conduit à une question importante~: quels sont les logiciels
qui gèrent le chargement d'image par un système de qui gèrent le chargement d'image par un système de
\textsl{plugin}\index{plugin}, \textsl{plugin}\index{plugin},

13
essai.c
View File

@ -18,8 +18,6 @@ int verbosity;
void fait_un_dessin(FloatImg *dessin) void fait_un_dessin(FloatImg *dessin)
{ {
// fprintf(stderr, "je dessine dans %p\n", dessin);
fimg_draw_something(dessin); fimg_draw_something(dessin);
} }
@ -28,7 +26,6 @@ void help(void)
{ {
puts("Options :"); puts("Options :");
puts("\t-d WxH\timage size"); puts("\t-d WxH\timage size");
puts("\t-v\tincrease verbosity");
exit(0); exit(0);
} }
/* --------------------------------------------------------------------- */ /* --------------------------------------------------------------------- */
@ -60,19 +57,19 @@ fimg_drand48(&fimgB, 100.0);
foo = fimg_dump_to_file(&fimgB, "B.fimg", 0); foo = fimg_dump_to_file(&fimgB, "B.fimg", 0);
fimg_timer_set(0); fimg_timer_set(0);
#define NBP 5 #define NBP 500
for (foo=0; foo<NBP; foo++) { for (foo=0; foo<NBP; foo++) {
if (verbosity) { if (verbosity) {
printf("%5d / %5d\n", foo, NBP); printf("%5d / %5d\n", foo, NBP);
} }
fait_un_dessin(&fimgB); fait_un_dessin(&fimgB);
fimg_add_3(&fimgA, &fimgB, &fimgA); fimg_add_3(&fimgA, &fimgB, &fimgA);
// fimg_mul(&fimgA, &fimgB, &fimgA); // fimg_mul(&fimgA, &fimgB, &fimgA);
} }
tb = fimg_timer_get(0); tb = fimg_timer_get(0);
fprintf(stderr, "%s = %.2f seconds, %.2f s/p\n", __func__, tb, tb/(double)NBP); fprintf(stderr, "%s = %f seconds\n", __func__, tb);
foo = fimg_save_as_pnm(&fimgA, "out.pnm", 0); foo = fimg_save_as_pnm(&fimgA, "drand48.pnm", 0);
foo = fimg_dump_to_file(&fimgA, "out.fimg", 0); foo = fimg_dump_to_file(&fimgA, "drand48.fimg", 0);
fimg_destroy(&fimgA); fimg_destroy(&fimgA);
fimg_destroy(&fimgB); fimg_destroy(&fimgB);

View File

@ -110,9 +110,6 @@ for (y=0; y<hd; y++) {
return 0; return 0;
} }
/* --------------------------------------------------------------------- */ /* --------------------------------------------------------------------- */
/*
* this function can be optimized with direct pixel copy
*/
int fimg_extractor(FloatImg *in, FloatImg *out, FimgArea51 *rect) int fimg_extractor(FloatImg *in, FloatImg *out, FimgArea51 *rect)
{ {
int xs, ys, xd, yd; int xs, ys, xd, yd;

View File

@ -19,7 +19,7 @@ do
# only take the good spot # only take the good spot
fimg=$(printf "%s/%05d.fimg" ${OUTD} ${idx}) fimg=$(printf "%s/%05d.fimg" ${OUTD} ${idx})
${EXTR} -o ${fimg} ${TMPG} 800,600,560,240 ${EXTR} -o ${fimg} ${TMPG} 800,600,560,240 ${fimg}
# display ${fimg} ; exit # display ${fimg} ; exit

View File

@ -18,9 +18,7 @@ int extractor(char *srcname, char *dstname, FimgArea51 *rect)
FloatImg src, dst; FloatImg src, dst;
int foo; int foo;
#if DEBUG_LEVEL
fprintf(stderr, ">>> %s ( %s %s %p )\n", __func__, srcname, dstname, rect); fprintf(stderr, ">>> %s ( %s %s %p )\n", __func__, srcname, dstname, rect);
#endif
if (verbosity) { if (verbosity) {
print_rectangle((char *)__func__, rect); print_rectangle((char *)__func__, rect);