<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>libimage: la doc, enfin !</title> <link rel="stylesheet" type="text/css" href="libimage.css"> <meta name="generator" content="Vim et huile de phalange"> <meta name="keywords" content="libimage, oulala, buv3tt3, Boudet, Targa"> </head> <body> <h1><a name="top">Libimage : <i>La Doc</i></a></h1> <p align=center> <tt>dernière mise à jour : 15 décembre 2015</tt><br> </p> <p class=menuhaut> [<a href="#primitives">primitives</a>] [<a href="README.txt">README</a>] [<a href="img-fichiers.html">fichiers</a>] [<a href="#tools">tools</a>] [<a href="img-cadres.html">cadres</a>] <br> [<a href="img-effets.html#effets">effets</a>] [<a href="img-op2x2.html">op2x2</a>] [<a href="img-texte.html">texte</a>] [<a href="img-showdiff.html">showdiff</a>] <br> [<a href="img-filtres.html">filtres</a>] [<a href="img-calculs.html">calculs</a>] [<a href="img-plotters.html">plotteurs</a>] [<a href="#scale">scale</a>] <br> [<a href="img-combine.html">combine</a>] [<a href="img-patterns.html">patterns</a>] [<a href="img-couleurs.html#couleurs">couleurs</a>] [<a href="img-couleurs.html#palettes">palettes</a>] <br> [<a href="img-dither.html">dithering</a>] [<a href="img-operat.html">opérations</a>] [<a href="img-alpha.html">alpha</a>] [<a href="img-povhf15.html">hf 15</a>] [<a href="img-bitplane.html">bitplane</a>] <br> [<a href="image77.html">fortran</a>] [<a href="img-df3.html">density file</a>] [<a href="#messages">messages</a>] [<a href="img-exemples.html">exemples</a>] [<a href="#liens">liens</a>] </p> <p> <b>libimage</b> est une librairie de traitement de les images que j'ai fabriquée moi-même avec mon <a href="http://www.vim.org/"><tt>vim</tt></a> et mes <a href="http://gcc.gnu.org/"><tt>gcc & g77</tt></a> tout seul comme un grand. Tout n'est pas documenté, loin de là, seulement les fonctions que j'utilise actuellement. Par contre, la <a href="img-devel.html#compilation">procédure d'installation</a> est à peu près explicite. </p> <p> 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 <a href="libimage.tar.gz">sources</a> à votre disposition. <a href="img-devel.html#utsl">utsl</a>. Il existe aussi quelques <a href="#exemples">exemples</a> d'utilisation dans la vie réelle. </p> <h2><a name="primitives">primitives</a></h2> <dl class="proto"> <dt>Image_Desc * Image_alloc(int w, int h, int type) <dd>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... <b>!!!</b> le contenu de l'image n'est pas initialisé. Son contenu est allé à Toire. Il faut utiliser <tt>Image_clear</tt> pour l'effacer. <dt>int Image_DeAllocate(Image_Desc *) <dd>Restitution de la mémoire 'pixel' d'une image. Attention, la mémoire du descripteur n'est <b>pas</b> rendue. C'est probablement un <a href="img-devel.html#bugs">bug</a>. <dt>Image_Desc * Image_clone(Image_Desc *i, int copie) <dd>Crée une copie d'une image de même type. Si le flag <tt>copie</tt> est <small>TRUE</small>, les pixels sont recopiés dans la nouvelle image. <dt>int Image_clear( Image_Desc *image, int r, int g, int b) <dd>Remplissage d'une image avec les <i>rgb</i> fournis. <i>28 Déc 2001</i>: si un canal alpha est présent, il est mis à 0. <dt>int Image_plotRGB(Image_Desc *i, int x, int y, int r, int g, int b) <dd>Ecrire un pixel dans une image, avec vérification des limites. <dt>int Image_plot_channel(Image_Desc *img, char channel, int x, int y, int value) <dd>Cette fonction permet de modifier un seul des canaux de l'image. Le paramètre 'channel' est un <tt>char</tt> 'r', 'g', 'b', 'R', 'G' ou 'B'. Le canal <i>alpha</i> n'est pas encore géré. <dt>int Image_getRGB(Image_Desc *i, int x, int y, int *pr, int *pg, int *pb) <dd>Lecture d'un pixel. En rajoutant un 'A' au nom de la fonction, et un quatrième pointeur sur <tt>int</tt>, on peut aussi lire le canal <a href="img-alpha.html">alpha</a>. <dt>Image_print_version(int flag) <dd>Affiche sur <tt>stdout</tt> la version de la librairie. Si <tt>flag</tt> 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 <tt>#define IMAGE_VERSION_STRING</tt> utilisable dans un <i>printf ("version %s\n", IMAGE_VERSION_STRING);</i> de bon aloi. Attention quand même, si vous utilisez ce <tt>#define</tt> dans un programme lié avec la bibliothèque dynamique, <i>puis</i> que vous passiez à une version différente de la libimage, la version affichée par votre programme ne sera plus cohérente.<br> Pour un rapport de bug, le numéro de version est <b>indispensable</b>. C'est auprès de <a href="mailto:oulala@chez.com">moi</a> qu'il faut raler. </dl> <p class="HDP"><a href="#top">haut de page</a></p> <h2><a name="tools">tools</a></h2> <p> Différentes routines utilitaires, destinées avant tout à la mise au point des applications, mais qui ne sont pas interdites aux <i>péones</i>, loin de là. </p> <dl class="proto"> <dt>int Image_dump_descriptor(Image_Desc *im, char *text); <dd>Affiche, de façon désordonnée, les informations disséminées dans un descripteur d'image <i>Image_desc</i>. <dt>int Image_dump_rect(Image_Rect *rect, char *texte, int flag); <dd>Affiche le contenu d'une structure Image_Rect. Un flag différent de zéro rajoute l'autre coin (<i>pan</i>) et la surface. <dt>int Image_fabrique_une_mire(Image_Desc *im, RGB_map *map); <dd>Euh, ça devrait en principe marcher avec une image 320x200. Il existe d'autres <a href="img-mires.html">mires</a> dans le truc. <dt>Les chronomètres:</dt> <dd>On dispose de 42 chronomètres. Etonnant, non?<br> <tt>void Image_start_chrono(char *texte, int num_chrono);</tt><br> <tt>long Image_stop_chrono(char *texte, int num_chrono);</tt><br> 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.</dd> </dl> <p> Il y a aussi, dans le genre relativement utile, le <a href="img-marquage.html">marquage</a> des images. </p> <p class="HDP"><a href="#top">haut de page</a></p> <h2><a name="messages">messages</a></h2> <p> A la lecture du fichier <tt>tthimage.h</tt> vous avez constaté une série de #define pour les codes d'erreur. La fonction <tt>char * Image_err2str(int codeerr)</tt> permet d'obtenir un texte explicatif. Vous pouvez par exemple écrire: </p> <pre class="code"> foo = Image_blabla(gniark); printf("retour from hell: %s\n", Image_err2str(foo)); </pre> <dl class="proto"> <dt>char * Image_err2str(int codeerr); <dd>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. <dt>void Image_print_error(char * texte, int err); <dd>Affichage d'un message décrivant une erreur. Si le texte commence par le caractère '-', c'est sur <i>stdout</i>, sinon, c'est sur <i>stderr</i>. Les numéros d'erreur sont à décrypter dans <tt>tthimage.h</tt>. </dl> <p>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.</p> <p class="HDP"><a href="#top">haut de page</a></p> <h2><a name="exemples">exemples</a></h2> <ul> <li>J'ai <i>enfin</i> confectionné quelques <a href="img-outils.html">utilitaires</a> pour la ligne de commande qui appellent des primitives de la librairie. Ils sont <a href="img-outils.tar.gz">ici</a> et je vous invite à en lire les sources. C'est un bon point de départ pour apprendre à utiliser le bidule. <li>Le postprocessing des images des <i>Sources de Tar</i> a été fait avec libimage: combinaison de deux variantes de l'image faite par POV et divers effets de cadres. </ul> <p> En conclusion, vous êtes livré à vous-même avec ce kludge, mais j'espère que vous trouverez autant de <i>fun</i> à l'utiliser que j'en ai à le faire. Et je vous rappelle que ce logiciel est diffusé sous la bienveillante protection de la <b>DMZIZ licence</b> que vous pouvez trouver <a href="http://la.buvette.org/textes/dmdzz.html">par là</a>. </p> <h2><a name="liens">liens</a></h2> <ul> <li>Pour les fous de la fabrication d'images: <a href="http://www.povray.org/">Povray</a> et <a href="http://www.fractint.org/">Fractint</a>. <li>Pour les cinglés de la manipulation d'image: <a href="http://www.gimp.org/">Gimp</a> qui roulaize grave pour les clicketeurs, et <a href="http://www.imagemagick.org/">image-magick</a> pour les batcheurs. </ul> <p class="footer"> vous pouvez me contacter sur IRC : <tt>tth@freenode#tetalab</tt> <br> Si votre demande est raisonnable, je patche à donf.<br> </p> </body> </html>