Compare commits
No commits in common. "c59eedd33c50f0d9fe4cca51b1460282ce63946e" and "98affe4b403005619745ba1a9616a9571e234ef9" have entirely different histories.
c59eedd33c
...
98affe4b40
@ -98,23 +98,18 @@ Une représentation approximative d'un monde physique invisible.
|
|||||||
L'infinie bio-complexité de notre système oculaire et ses interactions
|
L'infinie bio-complexité de notre système oculaire et ses interactions
|
||||||
avec notre multivac neuronal n'est devenue quantifiable qu'avec
|
avec notre multivac neuronal n'est devenue quantifiable qu'avec
|
||||||
l'arrivée des premiers calculateurs
|
l'arrivée des premiers calculateurs
|
||||||
numériques quand certains ont songé à passer du flou mental à la grille
|
numériques quand certains ont songé à passer du flou mental à la grille physique.
|
||||||
physique.
|
|
||||||
|
|
||||||
Les détails techniques sur cette représentation sont en page
|
|
||||||
\pageref{FloatImg desc}, avec des pointeurs dedans.
|
|
||||||
Ah, les pointeurs, la pire chose du monde\dots
|
|
||||||
|
|
||||||
\subsubsection*{quelques rappels de comment on acquiert et numérise une image}
|
\subsubsection*{quelques rappels de comment on acquiert et numérise une image}
|
||||||
|
|
||||||
Avant de se l'approprier, il vaut la rendre réelle dans sa vision intérieur.
|
Avant de se l'approprier, il vaut la rendre réelle dans sa vision intérieur.
|
||||||
Il faut l'imaginer comme des lignes de code interposées entre la grille
|
Il faut l'imaginer comme des lignes de code interposées entre la grille
|
||||||
physique dont on vient de parler, et une autre grille, bien réelle, des
|
physique dont on vient de parler, et une autre grille, bien réelle, des
|
||||||
pixels sur notre écran Trinitron de 44cm.
|
pixels sur notre écran Trititron\footnote{Sony, u'r the best !} de 44cm.
|
||||||
Et puisque on en parle, je me permet de vous conseiller avec
|
Et puisque on en parle, je me permet de vous conseiller avec
|
||||||
\textbf{vigueur} la webcam de Playstation (aka PsEye).
|
\textbf{vigueur} la webcam de Playstation (aka PsEye).
|
||||||
Moins de 10 Euros
|
Moins de 10 Euros
|
||||||
dans les machin-trocs, et un grain d'image vraiment présent.
|
dans les trocs, et un grain d'image vraiment présent.
|
||||||
|
|
||||||
\texttt{https://fr.wikipedia.org/wiki/PlayStation\_Eye}
|
\texttt{https://fr.wikipedia.org/wiki/PlayStation\_Eye}
|
||||||
|
|
||||||
@ -128,9 +123,9 @@ grains de lumière chromatisés.
|
|||||||
\subsubsection*{quelques belles images / schémas polychromes en intro pour
|
\subsubsection*{quelques belles images / schémas polychromes en intro pour
|
||||||
illustrer tout ça}
|
illustrer tout ça}
|
||||||
|
|
||||||
Tour cela est dans le grand Ternet\footnote{\textsl{Thanks, mister J Postel}}
|
Tour cela est dans le grand Ternet\footnote{\textsl{bik kudo 2 J Postel}}
|
||||||
mondial, je pourrais même vous donner l'url si vous me promettez de ne pas
|
mondial, je pourrais même vous donner l'url si vous me promettez de ne pas
|
||||||
la glisser dans le capitalisme de surveillance.
|
la glissr dans le capitalisme de surveillance.
|
||||||
|
|
||||||
% ===================================================================
|
% ===================================================================
|
||||||
|
|
||||||
@ -349,12 +344,10 @@ sont décrits par un ensemble
|
|||||||
de données (certains appelent ça des \textsl{metadatas}) regroupées
|
de données (certains appelent ça des \textsl{metadatas}) regroupées
|
||||||
dans une jolie structure que nous allons examiner dès maintenant.
|
dans une jolie structure que nous allons examiner dès maintenant.
|
||||||
|
|
||||||
\label{FloatImg desc}
|
|
||||||
|
|
||||||
\begin{lstlisting}
|
\begin{lstlisting}
|
||||||
/* in memory descriptor */
|
/* in memory descriptor */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
unsigned long magic;
|
int magic;
|
||||||
int width;
|
int width;
|
||||||
int height;
|
int height;
|
||||||
int type;
|
int type;
|
||||||
@ -363,7 +356,7 @@ typedef struct {
|
|||||||
float *R, *G, *B, *A;
|
float *R, *G, *B, *A;
|
||||||
int reserved;
|
int reserved;
|
||||||
} FloatImg;
|
} FloatImg;
|
||||||
\end{lstlisting}\index{FloatImg desc}
|
\end{lstlisting}\index{FloatImg}
|
||||||
|
|
||||||
Le premier champ, \texttt{magic}, servira un de ces jours à
|
Le premier champ, \texttt{magic}, servira un de ces jours à
|
||||||
robustifier l'ensemble du machin.
|
robustifier l'ensemble du machin.
|
||||||
@ -926,16 +919,13 @@ Usage: mkfimg [options] quux.fimg width height
|
|||||||
-v increase verbosity
|
-v increase verbosity
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
Il y a deux syntaxes possibles pour les dimensions de l'image générée~:
|
|
||||||
deux nombres séparés ou la notation \texttt{WIDTHxHEIGHT}.
|
|
||||||
|
|
||||||
La plupart des types d'image générée prennent un paramètre flottant qui
|
La plupart des types d'image générée prennent un paramètre flottant qui
|
||||||
devra être donné avec l'option \texttt{-k F.F} avec une valeur par défaut
|
devra être donné avec l'option \texttt{-k F.F} avec une valeur par défaut
|
||||||
à $1.0$, ce qui n'est pas toujours une bonne valeur.
|
à $1.0$, ce qui n'est pas toujours une bonne valeur.
|
||||||
|
|
||||||
\begin{description} \index{XXX}
|
\begin{description} \index{XXX}
|
||||||
\item [black/gray/grey:] efface avec 0.0 (black) ou avec la valeur
|
\item [black/gray/grey:] efface avec 0.0 (black) ou avec la valeur
|
||||||
\texttt{-k} (niveau de gris).
|
\texttt{-k} (gray).
|
||||||
\item [drand48:] beaucoup de bruit dans chacun des canaux.
|
\item [drand48:] beaucoup de bruit dans chacun des canaux.
|
||||||
\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}
|
||||||
@ -1052,10 +1042,8 @@ 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 ?
|
ne devrait pas être trop difficile. Des volontaires ?
|
||||||
|
|
||||||
D'ailleurs, pourquoi $N$ logiciels indépendants alors q'un
|
\textsl{D'ailleurs, pourquoi $N$ logiciels indépendants alors q'un
|
||||||
seul devrait être nécessaire ?, ce qui me conduit à envisager
|
seul devrait être nécessaire ?}
|
||||||
un \textsl{exporter} universel, mais dont l'ergonomie et les
|
|
||||||
paramètres possibles doivent être réfléchis avec vigueur et nonchalance.
|
|
||||||
|
|
||||||
% -------------------------
|
% -------------------------
|
||||||
|
|
||||||
|
@ -4,12 +4,11 @@
|
|||||||
* http://la.buvette.org/photos/cumul
|
* http://la.buvette.org/photos/cumul
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define FIMG_VERSION 143
|
#define FIMG_VERSION 142
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* in memory descriptor
|
* in memory descriptor
|
||||||
*/
|
*/
|
||||||
#define MAGIC_FIMG 0x00F11F00
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
unsigned long magic;
|
unsigned long magic;
|
||||||
int width;
|
int width;
|
||||||
@ -29,7 +28,6 @@ typedef struct {
|
|||||||
int w, h, t;
|
int w, h, t;
|
||||||
} FimgFileHead;
|
} FimgFileHead;
|
||||||
|
|
||||||
#define MAGIC_AREA51 0xA5EA0051
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
unsigned long magic;
|
unsigned long magic;
|
||||||
int w, h;
|
int w, h;
|
||||||
|
@ -11,8 +11,7 @@ OBJS = fimg-png.o fimg-tiff.o misc-plots.o filtrage.o utils.o \
|
|||||||
geometry.o rotate.o fimg-openexr.o \
|
geometry.o rotate.o fimg-openexr.o \
|
||||||
equalize.o fimg-fits.o saturation.o histogram.o \
|
equalize.o fimg-fits.o saturation.o histogram.o \
|
||||||
hsv.o classif.o contour2x2.o qsortrgb.o exporter.o \
|
hsv.o classif.o contour2x2.o qsortrgb.o exporter.o \
|
||||||
displacement.o dithering.o plasmas.o incrustator.o \
|
displacement.o dithering.o plasmas.o incrustator.o
|
||||||
recurse.o
|
|
||||||
|
|
||||||
#---------------------------------------------------------------
|
#---------------------------------------------------------------
|
||||||
|
|
||||||
@ -36,9 +35,6 @@ tests.o: tests.c tests.h $(DEPS)
|
|||||||
|
|
||||||
# ###
|
# ###
|
||||||
|
|
||||||
recurse.o: recurse.c $(DEPS)
|
|
||||||
gcc $(COPT) -c $<
|
|
||||||
|
|
||||||
incrustator.o: incrustator.c $(DEPS)
|
incrustator.o: incrustator.c $(DEPS)
|
||||||
gcc $(COPT) -c $<
|
gcc $(COPT) -c $<
|
||||||
|
|
||||||
|
@ -1,26 +0,0 @@
|
|||||||
/*
|
|
||||||
RECURSION 'QUADTREE' SUR LES IMAGES
|
|
||||||
-----------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <math.h>
|
|
||||||
|
|
||||||
#include "../floatimg.h"
|
|
||||||
|
|
||||||
/* -------------------------------------------------------------------- */
|
|
||||||
/* may be we need some private variables ? */
|
|
||||||
/* -------------------------------------------------------------------- */
|
|
||||||
/* nouveau 29 avril 2021, pendant un autre masque-flamme coronavidique */
|
|
||||||
|
|
||||||
int fimg_recursion_proto(FloatImg *src, FloatImg *dst, int notused)
|
|
||||||
{
|
|
||||||
|
|
||||||
#if DEBUG_LEVEL
|
|
||||||
fprintf(stderr, ">>> %s ( %p %p %d )\n", __func__, src, dst, notused);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
/* -------------------------------------------------------------------- */
|
|
||||||
/* -------------------------------------------------------------------- */
|
|
@ -16,41 +16,6 @@
|
|||||||
|
|
||||||
extern int verbosity;
|
extern int verbosity;
|
||||||
|
|
||||||
/* --------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
int fimg_recursion_proto(FloatImg *src, FloatImg *dst, int notused);
|
|
||||||
|
|
||||||
int essai_recursion(char *inf, char *outf, int flags)
|
|
||||||
{
|
|
||||||
int foo;
|
|
||||||
FloatImg src, dst;
|
|
||||||
|
|
||||||
fprintf(stderr, ">>> %s ( '%s' '%s' 0x%04X )\n", __func__,
|
|
||||||
inf, outf, flags);
|
|
||||||
|
|
||||||
foo = fimg_create_from_dump(inf, &src);
|
|
||||||
if (0 != foo) {
|
|
||||||
fprintf(stderr, "%s: err %d loading image '%s'\n", __func__,
|
|
||||||
foo, inf);
|
|
||||||
return foo;
|
|
||||||
}
|
|
||||||
|
|
||||||
fimg_clone(&src, &dst, 0);
|
|
||||||
|
|
||||||
foo = fimg_recursion_proto(&src, &dst, flags);
|
|
||||||
if (foo) {
|
|
||||||
fprintf(stderr, "%s: fail %d\n", __func__, foo);
|
|
||||||
return foo;
|
|
||||||
}
|
|
||||||
|
|
||||||
foo = fimg_export_picture(&dst, outf, 0);
|
|
||||||
if (foo) {
|
|
||||||
fprintf(stderr, "%s : err %d saving result\n", __func__, foo);
|
|
||||||
return foo;
|
|
||||||
}
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
/* --------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------- */
|
||||||
int essai_miroir(char *inf, char *outf, int flags)
|
int essai_miroir(char *inf, char *outf, int flags)
|
||||||
{
|
{
|
||||||
@ -82,7 +47,7 @@ if (foo) {
|
|||||||
return foo;
|
return foo;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return -1;
|
||||||
}
|
}
|
||||||
/* --------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------- */
|
||||||
/* nouveau 21 mars 2021 - rue d'Aragon */
|
/* nouveau 21 mars 2021 - rue d'Aragon */
|
||||||
|
@ -169,7 +169,6 @@ if (1 != argc-optind) {
|
|||||||
foo = convertir_fimg_en_machinable(argv[optind], "-", steps, norm_val);
|
foo = convertir_fimg_en_machinable(argv[optind], "-", steps, norm_val);
|
||||||
if (foo) {
|
if (foo) {
|
||||||
fprintf(stderr, "%s : got a %d from convertor\n", argv[0], foo);
|
fprintf(stderr, "%s : got a %d from convertor\n", argv[0], foo);
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -165,13 +165,6 @@ if (foo) {
|
|||||||
* we can now create the resultant image, and going coredump...
|
* we can now create the resultant image, and going coredump...
|
||||||
*/
|
*/
|
||||||
foo = fimg_create(&dest, srcA.width, srcA.height, srcA.type);
|
foo = fimg_create(&dest, srcA.width, srcA.height, srcA.type);
|
||||||
if (foo) {
|
|
||||||
fprintf(stderr, "%s: crash coredump on create fimg\n", argv[0]);
|
|
||||||
#if MUST_ABORT
|
|
||||||
abort();
|
|
||||||
#endif
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
// fimg_describe(&dest, "destination");
|
// fimg_describe(&dest, "destination");
|
||||||
|
|
||||||
foo = exec_operator(&srcA, &srcB, action, &dest);
|
foo = exec_operator(&srcA, &srcB, action, &dest);
|
||||||
|
@ -63,7 +63,7 @@ int foo;
|
|||||||
puts("Usage:\tmkfimg [options] quux.fimg width height");
|
puts("Usage:\tmkfimg [options] quux.fimg width height");
|
||||||
|
|
||||||
puts("\t-k N.N\tgive a float parameter");
|
puts("\t-k N.N\tgive a float parameter");
|
||||||
fputs("\t-t bla\thowto make the pic :\n\t\t", stdout);
|
fputs("\t-t bla\thowto make the pic\n\t\t", stdout);
|
||||||
for (foo=0; types[foo].code; foo++) {
|
for (foo=0; types[foo].code; foo++) {
|
||||||
printf("%s ", types[foo].name);
|
printf("%s ", types[foo].name);
|
||||||
}
|
}
|
||||||
@ -79,7 +79,7 @@ exit(0);
|
|||||||
/* --------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------- */
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int foo, opt, nbargs;
|
int foo, opt;
|
||||||
int width, height;
|
int width, height;
|
||||||
char *fname;
|
char *fname;
|
||||||
float fvalue = 1.0;
|
float fvalue = 1.0;
|
||||||
@ -103,33 +103,21 @@ for (foo=0; foo<argc; foo++)
|
|||||||
fprintf(stderr, "%3d %s\n", foo, argv[foo]);
|
fprintf(stderr, "%3d %s\n", foo, argv[foo]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (3 != argc-optind) {
|
||||||
|
fprintf(stderr, "%s need filename, width & height\n", argv[0]);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
if (type < 0) {
|
if (type < 0) {
|
||||||
fprintf(stderr, "type '%s' is unknow\n", tname);
|
fprintf(stderr, "type '%s' is unknow\n", tname);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
nbargs = argc-optind;
|
|
||||||
switch (nbargs) {
|
|
||||||
case 2:
|
|
||||||
if (2!=parse_WxH(argv[optind+1], &width, &height)) {
|
|
||||||
fprintf(stderr, "%s: parse error on '%s'\n",
|
|
||||||
argv[0], argv[optind+1]);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
width = atoi(argv[optind+1]);
|
|
||||||
height = atoi(argv[optind+2]);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
fprintf(stderr, "%s need filename, width & height\n", argv[0]);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
fname = argv[optind];
|
fname = argv[optind];
|
||||||
|
width = atoi(argv[optind+1]); height = atoi(argv[optind+2]);
|
||||||
|
|
||||||
if (verbosity>1) fprintf(stderr, "*** mkfimg *** %s %s\n", __DATE__, __TIME__);
|
if (verbosity>1) fprintf(stderr, "*** mkfimg *** %s %s\n", __DATE__, __TIME__);
|
||||||
if (verbosity) fprintf(stderr, "making '%s' %dx%d, type %d\n",
|
if (verbosity) fprintf(stderr, "making '%s' %d x %d, type %d\n",
|
||||||
fname, width, height, type);
|
fname, width, height, type);
|
||||||
|
|
||||||
srand48(getpid() ^ time(NULL));
|
srand48(getpid() ^ time(NULL));
|
||||||
|
Loading…
Reference in New Issue
Block a user