dernière mise à jour : 15 décembre 2015
libimage est une librairie de traitement de les images que j'ai
fabriquée moi-même avec mon
vim et mes
gcc & g77 tout seul
comme un grand. Tout n'est pas documenté, loin de là, seulement les fonctions
que j'utilise actuellement. Par contre, la
procédure d'installation est à peu
près explicite.
Il est difficile de décrire ce que font certaines fonctions, vous devrez donc
les essayer par vous même pour vous faire une idée. Et en cas de doute, vous
avez les
sources
à votre disposition.
utsl.
Il existe aussi quelques exemples d'utilisation
dans la vie réelle.
- Image_Desc * Image_alloc(int w, int h, int type)
- Création d'une nouvelle image. Les types valides sont:
IMAGE_GREY, IMAGE_RGB et IMAGE_RGBA. En fait, les images en niveaux de
gris sont très mal gérées... !!! le contenu de l'image n'est
pas initialisé. Son contenu est allé à Toire. Il faut utiliser
Image_clear pour l'effacer.
- int Image_DeAllocate(Image_Desc *)
- Restitution de la mémoire 'pixel' d'une image. Attention, la mémoire
du descripteur n'est pas rendue. C'est probablement un
bug.
- Image_Desc * Image_clone(Image_Desc *i, int copie)
- Crée une copie d'une image de même type. Si le flag copie est
TRUE, les pixels sont recopiés dans la nouvelle image.
- int Image_clear( Image_Desc *image, int r, int g, int b)
- Remplissage d'une image avec les rgb fournis.
28 Déc 2001: si un canal alpha est présent, il est mis à 0.
- int Image_plotRGB(Image_Desc *i, int x, int y, int r, int g, int b)
- Ecrire un pixel dans une image, avec vérification des limites.
- int Image_plot_channel(Image_Desc *img, char channel, int x, int y, int value)
- Cette fonction permet de modifier un seul des canaux de l'image.
Le paramètre 'channel' est un char 'r', 'g', 'b', 'R', 'G' ou 'B'.
Le canal alpha n'est pas encore géré.
- int Image_getRGB(Image_Desc *i, int x, int y, int *pr, int *pg, int *pb)
- Lecture d'un pixel. En rajoutant un 'A' au nom de la fonction, et un
quatrième pointeur sur int, on peut aussi lire le canal
alpha.
- Image_print_version(int flag)
- Affiche sur stdout la version de la librairie. Si flag
est != 0, il y a des informations complémentaires. Si flag > 1 certaines
options de compilation et/ou d'installation sont aussi affichées.
Vous disposez également d'un #define IMAGE_VERSION_STRING
utilisable dans un
printf ("version %s\n", IMAGE_VERSION_STRING); de bon aloi.
Attention quand même, si vous utilisez ce #define dans un programme
lié avec la bibliothèque dynamique, puis que vous passiez à une
version différente de la libimage, la version affichée par votre programme
ne sera plus cohérente.
Pour un rapport de bug, le numéro de version est indispensable.
C'est auprès de moi qu'il faut raler.
haut de page
Différentes routines utilitaires, destinées avant tout à la mise au point
des applications, mais qui ne sont pas interdites aux péones, loin
de là.
- int Image_dump_descriptor(Image_Desc *im, char *text);
- Affiche, de façon désordonnée, les informations disséminées dans un
descripteur d'image Image_desc.
- int Image_dump_rect(Image_Rect *rect, char *texte, int flag);
- Affiche le contenu d'une structure Image_Rect. Un flag différent de
zéro rajoute l'autre coin (pan) et la surface.
- int Image_fabrique_une_mire(Image_Desc *im, RGB_map *map);
- Euh, ça devrait en principe marcher avec une image 320x200.
Il existe d'autres mires dans le truc.
- Les chronomètres:
- On dispose de 42 chronomètres. Etonnant, non?
void Image_start_chrono(char *texte, int num_chrono);
long Image_stop_chrono(char *texte, int num_chrono);
Maintenant, comment les utiliser avec précision et certitude est un exercice
laissé à nos lecteurs... Sans compter que certains sont réservés par tTh.
Il y a aussi, dans le genre relativement utile,
le marquage des images.
haut de page
A la lecture du fichier tthimage.h vous avez constaté une série de #define
pour les codes d'erreur. La fonction char * Image_err2str(int codeerr)
permet d'obtenir un texte explicatif. Vous pouvez par exemple écrire:
foo = Image_blabla(gniark);
printf("retour from hell: %s\n", Image_err2str(foo));
- char * Image_err2str(int codeerr);
- Conversion du code numérique de retour des fonctions en texte
klingonesquement compréhensible. Si la valeur envoyée n'est pas
gérée, un message bidon est fabriqué à la volée.
- void Image_print_error(char * texte, int err);
- Affichage d'un message décrivant une erreur. Si le texte commence par
le caractère '-', c'est sur stdout, sinon, c'est sur stderr.
Les numéros d'erreur sont à décrypter dans tthimage.h.
Je suis vraiment désolé, mais je suis totalement incapable
de fournir une liste détaillée, avec des explications, de tout
les codes d'erreur. Pourtant, ça serait bien comfortable.
haut de page
- J'ai enfin confectionné quelques
utilitaires pour la ligne de
commande qui appellent des primitives de la librairie. Ils sont
ici et
je vous invite à en lire les sources. C'est un bon point de départ pour
apprendre à utiliser le bidule.
- Le postprocessing des images des
Sources de Tar a été
fait avec libimage: combinaison de deux variantes de l'image faite par
POV et divers effets de cadres.
En conclusion, vous êtes livré à vous-même avec ce kludge, mais j'espère
que vous trouverez autant de fun à l'utiliser que j'en ai à le faire.
Et je vous rappelle que ce logiciel est diffusé sous la bienveillante
protection de la DMZIZ licence que vous pouvez trouver
par là.
- Pour les fous de la fabrication d'images:
Povray et
Fractint.
- Pour les cinglés de la manipulation d'image:
Gimp qui roulaize grave pour les
clicketeurs, et image-magick
pour les batcheurs.