<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>libimage: la doc de l'interface Fortran</title> <link rel="stylesheet" type="text/css" href="libimage.css"> <meta name="generator" content="Vim et huile de phalange"> <meta name="keywords" content="libimage, image77, Boudet, Fortran, F77, g77"> </head> <body> <a name="top"><h1>libimage et fortran</h1></a> <p align=center> <tt>dernière mise à jour: 26 juin 2022</tt><br> </p> <hr> <h3> Le FORTRAN77 est définitivement perdu, du moins la version <i>GNU</i> n'est plus maintenue. Il est donc temps de passer au Fortran Moderne. </h3> <hr> <p class=explique"> Voici la description de l'interface de l'ancien système. Le couplage avec <tt>gfortran</tt> sera assez semblable. </p> <h2><a name="primitives">primitives</a></h2> <dl class="proto"> <dt>SLOT = IMG_CREATE(WIDTH, HEIGHT, 3) <dd> Création d'une nouvelle image de type RGB en mémoire. <dt>NEWSLOT = IMG_CLONE(SLOT) <dd> Création d'une copie en mémoire d'une image existante. <dt>CALL IMG_FREE(SLOT) <dd> Destruction d'une image. Il est convenant de ne plus utiliser son <i>numéro de slot</i> après cette opération. <dt>CALL IMG_CLEAR(SLOT, RED, GREEN, BLUE) <dd> Remplissage d'une image avec les valeurs RGB entre 0 et 255. <dt>CALL IMG_DIMS(SLOT, WIDTH, HEIGHT) <dd> Récupération des dimensions d'une image. </dl> <h2><a name="io">input/output</a></h2> <p>Je vous préviens d'entrée, les problèmes de <i>BOUTISME</i> sont loin d'être réglés. Donc pour le moment, ça ne marche bien <i>QUE</i> sur des processeurs de type <i>386</i>. Pour les <font color="#8080ff">Sparcs</font> c'est en bonne voie. A vous d'essayer, et de me raconter ça... </p> <dl class="proto"> <dt>PIC = TGA_ALOAD(NOM, W, H, T) <dd>Chargement en mémoire de l'image 'NOM' et récupération de trois de ses caractéristiques: largeur, hauteur et ???. La valeur retournée par la function est le numéro de slot, à conserver précieusement. <dt>FOO = TGA_SAVE_N(SLOT, NUMBER) <dd>Sauvegarde du SLOT au format TGA sous un nom de fichier de la forme <tt>im_nnnnn.tga</tt>. <i>exemple: NUMBER=42 donne 'im_00042.tga'</i>. Le nombre de '0' de tête étant à vérifier, <a href="img-devel.html">utsl</a>. <dt>FOO = IMG_PPM_SA(SLOT, NOM, 0) <dd> Enregistrement au format <a href="img-fichiers.html#pnm">portable pixmap</a> en mode ascii. Attention, les fichiers sont <i>très</i> gros. Par contre, ils sont très facile à lire sur toutes les plateformes. <font color="red">fonction pas trop testée</font>. <dt>FOO = IMG_TGA_SA(SLOT, NOM, 0) <dd> Pareil, sauf que ça sauve en TGA 24 bits non compressé... Mais la compression est prévue. Attention, le nom de fichier ne doit pas contenir d'espaces. </dl> <p align=right><a href="#top">haut de page</a></p> <h2><a name="utilitaires">utilitaires</a></h2> <dl class="proto"> <dt>call img_version(flag)<br> <dd>Affiche la version de la librairie sur <i>stdout</i>. Si le <small>FLAG</small> est différent de 0, infos supplémentaires. <dt>call img_dumpslots(flag)<br> <dd>Une liste des images actuellement déclarées. <small>FLAG</small> à 1 donne plus d'informations. </dl> <hr> <p align=right><a href="#top">haut de page</a></p> <h2><a name="effets">effets</a></h2> <p>Je ne vais pas m'étendre sur les effets disponibles. Il y a plus de docs <a href="img-effets.html">ici</a> où <a href="img-effets.html#effets2">là</a>. Je vais juste expliquer comment les appeler depuis g77. Il y a deux façons de proceder: appels directs (kimarch) et utilisation d'un interpréteur de commandes (kimarchePAS). </p> <p> Quelques effets expérimentaux sont arrivés en Janvier 2003. Le source de l'interface est <tt>img77x.c</tt> et vous trouverez dedans bien plus de détails que ce que je ne peux en donner ici. </p> <p align=right><a href="#top">haut de page</a></p> <h2><a name="bruits">Générateurs de bruit</a></h2> <p> Attention, la rigueur mathématique de ces fonctions <b>n</b>'est <b>pas</b> garantie. Avant de critiquer, <a href="img-devel.html#utsl">Utsl</a>. </p> <ul> <li><tt>call img_grayrnd0(slot, bas, haut)</tt> <li><tt>call img_rgbrnd0(slot, bas, haut)</tt> <li><tt>call img_rgbrnd1(slot, br, bv, bb, hr, hv, hb)</tt> <li><tt>call img_grayrnd2(slot, bas, haut)</tt> </ul> <p> Dans le fichier <tt>funcs77.f</tt>, vous trouverez une fonction de démonstration des générateurs de bruit. </p> <p align=right><a href="#top">haut de page</a></p> <h2><a name="recopies">Recopie d'images</a></h2> <p> Attention, ces fonctions ne sont pas blindées, il y a de fortes probabilités de <i>coredump</i> si les paramètres passés sont incohérents. </p> <dl class="proto"> </dl> <p align=right><a href="#top">haut de page</a></p> <h2><a name="textes">Ecriture de textes</a></h2> <p> Là aussi c'est un peu brouillon, j'ai rajouté ça rapidement alors que je travaillais sur le <a href="http://tontonth.free.fr/recuit/cuisson-fmbl.html">recuit simulé</a>. En fait, c'est un domaine assez vaste, et qui n'est pas trop normalisé dans les systèmes Unix. Donc, je <a href="img-texte.html">bricole</a>, et je ne construit rien de vraiment concret. </p> <dl class="proto"> <dt>Houba ? <dd>Hop ! <dt>call img_txt_0(numimg, texte, x, y, mode) <dd>Le plus tortueux des paramètres, c'est <tt>mode</tt>, qui peut prendre plusieurs valeurs non documentées. </dl> <p align=right><a href="#top">haut de page</a></p> <h2><a name="povray">POVray</a></h2> <p> <a href="http://www.povray.org/">POVray</a> est un <i>ray-tracer</i> qui peut utiliser des <i>height_fields</i>, c'est à dire des matrices à deux dimensions dont chaque élément <a href="img-povhf15.html">représente</a> une altitude. </p> <dl class="proto"> <dt>img_hf_plot (img, x, y, h) <dd>Ecriture de l'altitude d'un point. L'altitude est un entier compris entre 0 et 32767. Le clipping est mal géré. <dt>h = img_hf_height (img, x, y) <dd>Lecture de l'altitude d'un point. Une valeur négative indique à coup sûr une erreur. <dt>img_hf_add (image, x, y, valeur) <dd>Ajoute <tt>valeur</tt> à l'altitude du point x,y. L'altitude résultante sera automagiquement bornée entre 0 et 32767. <dt>img_hf_smooth(src, dst, k) <dd>Lissage d'une image. <tt>K</tt> permet de régler la force de l'action, et c'est expliqué <a href="img-povhf15.html#traitements">là</a>. <dt>img_hf_noise3(img, coef, flag) <dd>Bruitage d'une image, proportionnellement à l'altitude. Le <tt>coef</tt> doit être un <i>double precision</i>. <tt>flag</tt> n'est pas utilisé, donc il faut mettre 0. </dl> <p> Pour sauvegarder un height-field généré depuis le Fortran, on utilisera les fonctions <a href="#io">classiques</a> d'enregistrement de fichiers Targa. </p> <p align=right><a href="#top">haut de page</a></p> <h2><a name="fonctions">fonctions</a></h2> <dl class="proto"> <dt>call img_mix0(numsrc1, numsrc2, numdst, float_coef) <dd>Mix of the two source pictures in the destination. The coefficient is a <tt>float</tt> between 0.0 and 1.0 but you can try others values... </dl> <p align=right><a href="#top">haut de page</a></p> <h2><a name="cadres">cadres</a></h2> <dl class="proto"> <dt>call img_cadre(numimage, type) <dd> <i>type</i> est un entier donnant le numéro du cadre. Pour ceux qui veulent une correspondance, il faut chercher dans <tt>img77a.c</tt>. </dl> <p align=right><a href="#top">haut de page</a></p> <h2><a name="bitplane">bitplane</a></h2> <p> Mmmmm... Pas de code Fortran écrit, mais déja un peu de <a href="img-bitplane.html">documentation</a> de quelques primitives en C. </p> <p align=right><a href="#top">haut de page</a></p> <h2><a name="calculs">Calculs</a></h2> <p>Certaines de ces choses devraient plutôt être vues comme des <a href="#fonctions">fonctions</a>. Ce n'est pas si simple. </p> <p align=right><a href="#top">haut de page</a></p> <h2><a name="patterns">Patterns</a></h2> <a href="img-patterns.html">Mmmmm</a>... <p align=right><a href="#top">haut de page</a></p> <h2><a name="exemples">exemples</a></h2> <p> Dans le <a href="libimage.tar.gz">tarball</a> vous trouverez un <tt>demo77.f</tt> et un <tt>funcs.f</tt> qui pourront vous servir de base de départ. Mais pour voir tout de suite de quoi il s'agit : </p> <pre class="code"> PROGRAM exemple INTEGER image, IMG_CREATE image = IMG_CREATE(200, 200, 3) CALL IMG_CLEAR(image, 127, 127, 127) CALL IMG_NOISE(image, image, 242) CALL TGA_SAVE_N(image, 42) END </pre> <p> <a href="http://tontonth.free.fr/pov/hf/">Ici</a>, vous trouverez un début de tutoriel sur la création des Hf par programme. Rien de spécifique au Fortran, mais des principes généraux ré-utilisables. </p> <p align=right><a href="#top">haut de page</a></p> <h2><a name="liens">liens</a></h2> <ul> <li>Sur la plupart des systèmes libres, on utilise le compilateur <a href="http://gcc.gnu.org/">g77</a>. Et même sur des systèmes <i>non</i> libres, d'ailleurs...</li> <li>On peut aussi écrire des <a href="http://krabulator.free.fr/devel/cgi77.html">CGI</a> avec g77. Mais je n'ai pas encore testé une combinaison de cgi77 et libimage. </li> <li>Une alternative digne d'interet est <b>PGPLOT</b> pour dessiner en Fortran. Votre <a href="http://www.google.com/">g00gl3</a> favori vous trouvera le lien kivabien.</li> <li>Je travaille de temps en temps sur quelques traitements de "haut niveau" en Fortran77, c'est un peu du <a href="http://tboudet.free.fr/libimage/imagerie77.tar.gz">code</a> intérimaire, puisque une migration vers <b>gfortran</b> est en préparation. </li> <li>Depuis quelques jours, j'ai ouvert un <a href="http://fortran.morefun.over-blog.com/">blog</a> pour vous raconter mon utilisation <i>alternative</i> de ce langage d'un autre siècle.</li> </ul> <p class="footer"> vous pouvez me contacter:<br> <a href="mailto:oulala@chez.com">oulala@chez.com</a><br> Si votre demande est sur carte perforée, je patche à donf.<br> <a href="#top">haut de page</a></p> </body> </html>