Compare commits

..

5 Commits

Author SHA1 Message Date
tth
c59eedd33c better args parsing in mkfimg 2021-05-04 10:29:02 +02:00
tth
65eaca26cc nothing to see here 2021-05-04 09:56:18 +02:00
tth
87ab682879 questions et reponses, la suite 2021-05-03 19:37:08 +02:00
tth
08a30d9620 no more oomk ? 2021-05-01 17:54:42 +02:00
tth
b63b590e1d return an error code when needed 2021-04-30 15:32:14 +02:00
8 changed files with 122 additions and 23 deletions

View File

@ -98,18 +98,23 @@ Une représentation approximative d'un monde physique invisible.
L'infinie bio-complexité de notre système oculaire et ses interactions
avec notre multivac neuronal n'est devenue quantifiable qu'avec
l'arrivée des premiers calculateurs
numériques quand certains ont songé à passer du flou mental à la grille physique.
numériques quand certains ont songé à passer du flou mental à la grille
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}
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
physique dont on vient de parler, et une autre grille, bien réelle, des
pixels sur notre écran Trititron\footnote{Sony, u'r the best !} de 44cm.
pixels sur notre écran Trinitron de 44cm.
Et puisque on en parle, je me permet de vous conseiller avec
\textbf{vigueur} la webcam de Playstation (aka PsEye).
Moins de 10 Euros
dans les trocs, et un grain d'image vraiment présent.
dans les machin-trocs, et un grain d'image vraiment présent.
\texttt{https://fr.wikipedia.org/wiki/PlayStation\_Eye}
@ -123,9 +128,9 @@ grains de lumière chromatisés.
\subsubsection*{quelques belles images / schémas polychromes en intro pour
illustrer tout ça}
Tour cela est dans le grand Ternet\footnote{\textsl{bik kudo 2 J Postel}}
Tour cela est dans le grand Ternet\footnote{\textsl{Thanks, mister J Postel}}
mondial, je pourrais même vous donner l'url si vous me promettez de ne pas
la glissr dans le capitalisme de surveillance.
la glisser dans le capitalisme de surveillance.
% ===================================================================
@ -344,10 +349,12 @@ sont décrits par un ensemble
de données (certains appelent ça des \textsl{metadatas}) regroupées
dans une jolie structure que nous allons examiner dès maintenant.
\label{FloatImg desc}
\begin{lstlisting}
/* in memory descriptor */
typedef struct {
int magic;
unsigned long magic;
int width;
int height;
int type;
@ -356,7 +363,7 @@ typedef struct {
float *R, *G, *B, *A;
int reserved;
} FloatImg;
\end{lstlisting}\index{FloatImg}
\end{lstlisting}\index{FloatImg desc}
Le premier champ, \texttt{magic}, servira un de ces jours à
robustifier l'ensemble du machin.
@ -919,13 +926,16 @@ Usage: mkfimg [options] quux.fimg width height
-v increase verbosity
\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
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.
\begin{description} \index{XXX}
\item [black/gray/grey:] efface avec 0.0 (black) ou avec la valeur
\texttt{-k} (gray).
\texttt{-k} (niveau de gris).
\item [drand48:] beaucoup de bruit dans chacun des canaux.
\item [hdeg/vdeg:] dégradé du noir au blanc (relatif à \texttt{-k}).
\end{description}
@ -1042,8 +1052,10 @@ D'un autre coté, écrire un greffon d'import/export pour
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
seul devrait être nécessaire ?}
D'ailleurs, pourquoi $N$ logiciels indépendants alors q'un
seul devrait être nécessaire ?, ce qui me conduit à envisager
un \textsl{exporter} universel, mais dont l'ergonomie et les
paramètres possibles doivent être réfléchis avec vigueur et nonchalance.
% -------------------------

View File

@ -4,11 +4,12 @@
* http://la.buvette.org/photos/cumul
*/
#define FIMG_VERSION 142
#define FIMG_VERSION 143
/*
* in memory descriptor
*/
#define MAGIC_FIMG 0x00F11F00
typedef struct {
unsigned long magic;
int width;
@ -28,6 +29,7 @@ typedef struct {
int w, h, t;
} FimgFileHead;
#define MAGIC_AREA51 0xA5EA0051
typedef struct {
unsigned long magic;
int w, h;

View File

@ -11,7 +11,8 @@ OBJS = fimg-png.o fimg-tiff.o misc-plots.o filtrage.o utils.o \
geometry.o rotate.o fimg-openexr.o \
equalize.o fimg-fits.o saturation.o histogram.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
#---------------------------------------------------------------
@ -35,6 +36,9 @@ tests.o: tests.c tests.h $(DEPS)
# ###
recurse.o: recurse.c $(DEPS)
gcc $(COPT) -c $<
incrustator.o: incrustator.c $(DEPS)
gcc $(COPT) -c $<

26
funcs/recurse.c Normal file
View File

@ -0,0 +1,26 @@
/*
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;
}
/* -------------------------------------------------------------------- */
/* -------------------------------------------------------------------- */

View File

@ -16,6 +16,41 @@
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)
{
@ -47,7 +82,7 @@ if (foo) {
return foo;
}
return -1;
return 0;
}
/* --------------------------------------------------------------------- */
/* nouveau 21 mars 2021 - rue d'Aragon */

View File

@ -169,6 +169,7 @@ if (1 != argc-optind) {
foo = convertir_fimg_en_machinable(argv[optind], "-", steps, norm_val);
if (foo) {
fprintf(stderr, "%s : got a %d from convertor\n", argv[0], foo);
return 1;
}
return 0;

View File

@ -165,6 +165,13 @@ if (foo) {
* we can now create the resultant image, and going coredump...
*/
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");
foo = exec_operator(&srcA, &srcB, action, &dest);

View File

@ -63,7 +63,7 @@ int foo;
puts("Usage:\tmkfimg [options] quux.fimg width height");
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++) {
printf("%s ", types[foo].name);
}
@ -79,7 +79,7 @@ exit(0);
/* --------------------------------------------------------------------- */
int main(int argc, char *argv[])
{
int foo, opt;
int foo, opt, nbargs;
int width, height;
char *fname;
float fvalue = 1.0;
@ -103,21 +103,33 @@ for (foo=0; foo<argc; foo++)
fprintf(stderr, "%3d %s\n", foo, argv[foo]);
#endif
if (3 != argc-optind) {
fprintf(stderr, "%s need filename, width & height\n", argv[0]);
exit(1);
}
if (type < 0) {
fprintf(stderr, "type '%s' is unknow\n", tname);
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];
width = atoi(argv[optind+1]); height = atoi(argv[optind+2]);
if (verbosity>1) fprintf(stderr, "*** mkfimg *** %s %s\n", __DATE__, __TIME__);
if (verbosity) fprintf(stderr, "making '%s' %d x %d, type %d\n",
if (verbosity) fprintf(stderr, "making '%s' %dx%d, type %d\n",
fname, width, height, type);
srand48(getpid() ^ time(NULL));