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