libtthimage/Docs/libimage.html
2022-06-26 12:22:12 +02:00

242 lines
8.8 KiB
HTML

<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 &amp; 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 &gt; 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(&quot;retour from hell: %s\n&quot;, 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>