Compare commits

...

3 Commits

Author SHA1 Message Date
tTh
d23a35849a trying a new effect 2023-07-16 12:39:49 +02:00
tTh
82ffe1c2cc bla du dimanche soir 2023-07-10 02:26:57 +02:00
tTh
0a482a7316 fixed 2023-07-08 13:10:47 +02:00
9 changed files with 70 additions and 22 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 spacio-temporel. de **films flous** dans le domaine spatio-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,6 +21,38 @@
*/ */
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,6 +7,7 @@ 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, "err %d create image\n", foo); fprintf(stderr, "%s: err %d create from dump\n", __func__, foo);
exit(1); exit(1);
} }
@ -73,8 +73,6 @@ 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)
{ {
@ -161,14 +159,14 @@ puts("\t-s\tdo single test");
exit(0); exit(0);
} }
/* ----------------------------------------------------------- */ /* ----------------------------------------------------------- */
int experiment(void) int experiment(char *fname)
{ {
int foo; int foo;
FloatImg image, dest; FloatImg image, dest;
fprintf(stderr, "--------- EXPERIMENT ------------\n"); fprintf(stderr, "----- EXPERIMENT on '%s' -----\n", fname);
foo = fimg_create_from_dump("mire.fimg", &image); foo = fimg_create_from_dump(fname, &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);
@ -177,8 +175,8 @@ if (foo) {
foo = fimg_clone(&image, &dest, 0); foo = fimg_clone(&image, &dest, 0);
foo = graylevel2popcolors(&image, &dest, 0); foo = poke_sup_rb_g(&image, &dest);
fprintf(stderr, "POP COLOR- -> %d\n", foo); fprintf(stderr, "poke sup rb g --> %d\n", foo);
fimg_export_picture(&dest, "foo.png", 0); fimg_export_picture(&dest, "foo.png", 0);
@ -230,7 +228,7 @@ if (foo) {
} }
if (do_xper) { if (do_xper) {
experiment(); experiment(infile);
return 0; return 0;
} }
if (do_single) { if (do_single) {

View File

@ -53,6 +53,8 @@
\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}
@ -79,7 +81,12 @@ 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. joke Usenet}, avec des pointeurs dedans, mais vous êtes déja
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.
@ -510,7 +517,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. intégral\footnote{Un vrai désastre, même...}.
% _________ % _________
@ -1396,7 +1403,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, indispendable à qui veut faire des dont la connaissance est, pour moi, indispensable à 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.
@ -1625,10 +1632,12 @@ 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 identify, qui a tendance à d'autres commande de IM, comme \texttt{identify}\index{identify},
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} pour avancer\dots Je compte donc sur le bouquin de \textsl{Brunus}\index{Brunus}
pour avancer\dots
\subsection{Gimp}\index{Gimp} \subsection{Gimp}\index{Gimp}
@ -1662,7 +1671,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\footnote{Oui, David, c'est à toi que je pense.}. dessinateurs de talent.
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},

11
essai.c
View File

@ -18,6 +18,8 @@ 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);
} }
@ -26,6 +28,7 @@ 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);
} }
/* --------------------------------------------------------------------- */ /* --------------------------------------------------------------------- */
@ -57,7 +60,7 @@ 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 500 #define NBP 5
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);
@ -67,9 +70,9 @@ for (foo=0; foo<NBP; foo++) {
// fimg_mul(&fimgA, &fimgB, &fimgA); // fimg_mul(&fimgA, &fimgB, &fimgA);
} }
tb = fimg_timer_get(0); tb = fimg_timer_get(0);
fprintf(stderr, "%s = %f seconds\n", __func__, tb); fprintf(stderr, "%s = %.2f seconds, %.2f s/p\n", __func__, tb, tb/(double)NBP);
foo = fimg_save_as_pnm(&fimgA, "drand48.pnm", 0); foo = fimg_save_as_pnm(&fimgA, "out.pnm", 0);
foo = fimg_dump_to_file(&fimgA, "drand48.fimg", 0); foo = fimg_dump_to_file(&fimgA, "out.fimg", 0);
fimg_destroy(&fimgA); fimg_destroy(&fimgA);
fimg_destroy(&fimgB); fimg_destroy(&fimgB);

View File

@ -110,6 +110,9 @@ 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 ${fimg} ${EXTR} -o ${fimg} ${TMPG} 800,600,560,240
# display ${fimg} ; exit # display ${fimg} ; exit

View File

@ -18,7 +18,9 @@ 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);