libtthimage/Docs/image77.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>
<a href="img-effets.html#effets2"></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"></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>