Libimage : La Doc

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.

primitives

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

tools

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

messages

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

exemples

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à.

liens