322 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			322 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <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>
 | 
