<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>libimage: les textes</title> <link rel="stylesheet" type="text/css" href="libimage.css"> <meta name="generator" content="Vim et huile de phalange"> <meta name="keywords" content="libimage, fontes bitmap, truetype"> </head> <body> <a name="top"><h1 align=center>libimage / les textes</h1></a> <p align=center> <tt>dernière mise à jour: 14 décembre 2015</tt><br> </p> <p class="menuhaut"> [<a href="libimage.html">libimage</a>] [<a href="#16x24">16 x 24</a>] [<a href="#gropixels">gropixels</a>] [<a href="#outils">outils</a>] [<a href="img-asciiart.html">ascii art</a>] [<a href="#liens">liens</a>] </p> <h2><a name="fontes">Fontes internes</a></h2> <p> Pas grand chose pour le moment... Juste quelques fonctions instables et un kludge permettant de tester ces fonctions. J'en arrive à me demander si la doc <a href="image77.html#textes">f77</a> n'est pas plus complète. </p> <p><b>Attention !!!</b> Le 26 mars 2008, il y a eu un gros chargement dans la logique interne du bouzin: il faut maintenant soit spécifier un nom de fonte quand on trace une chaine, soit charger préalablement une fonte si on ne spécifie pas de nom. J'espère que ce changement ne va pas casser trop de trucs. <i>Hélas, espoir déçu, j'ai un bronx infernal dans plein de trucs...</i> </p> <p>Dans le tarball, il y a deux fontes 8x8 nommée <tt>libimage.fonte</tt> et <tt>8x8thin</tt>. A priori, les fontes 8x8 prévues pour la console Linux doivent fonctionner, et vous pourrez les reconnaitre à leur taille de 2048 octets. Il n'y a pas encore de quoi les visualiser dans tout ce fatras, mais je suis en train de coder ça...</p> <center><img src="all8x8chars.png"></center> <dl class="proto"> <dt>int Image_load_fnt8x8(char *nomfnt, U_BYTE *ou, int flags); <dd>Chargement d'une fonte 8x8 dans une zone statique, on ne peut donc avoir qu'une seule police en même temps, mais ça va bientôt changer. Les paramètres <tt>ou</tt> et <tt>flags</tt> sont inutilisés pour le moment. Si le nom du fichier fonte est NULL, une fonte par défaut sera utilisée. <dt>int Image_trace_caractere(Image_Desc *im, int x, int y, int code); <dd>Cette fonction est très primitive. Elle trace en <i>noir</i> sur un fond <i>blanc</i> en utilisant la fonte courante. <dt>int Image_trace_chaine_0(Image_Desc *im, char *txt, int x, int y, RGBA *paper, RGBA *ink, int flags); <dd>Bah, pas grand chose à dire, à part que le paramètre 'flags' doit être mis à zéro, et que cette fonction est <i>obsolète</i>, et l'exprime clairement. <dt>int Image_trace_chaine_1(Image_Desc *im, char *txt, int x, int y, char *nomfonte, RGBA *paper, RGBA *ink); <dd>Voici donc la nouvelle fonction pour écrire du texte 8x8 dans une image. Elle fonctionne en gros comme son ancêtre, mais permet en plus de spécifier un nom de fonte. Si celui-ci est <tt>NULL</tt>, c'est la dernière fonte chargée qui sera utilisée. <dt>int Image_texte_fonte(char *nomfonte, char *nomtga); <dd>Donc voilà le kludge. La seule valeur humainement supportable pour le paramètre <i>nomfonte</i>, c'est <tt>NULL</tt> et les insultes parce que <font color="orange">çamarchpa</font>, c'est pour moi. </dl> <p class="HDP"><a href="#top">haut de page</a></p> <a name="16x24"><h2>fonte 16 x 24</h2></a> <p>Enfin, ça y est, un support primitif des grosses fontes bitmap en 16x24 est en train de voir le jour. La description des dessins de caractères se fait dans un fichier texte spécialement prévu pour être manipulable par des outils Unix tels que <tt>awk</tt>. Ce fichier est une suite d'enregistrements contenant le code ascii du caractère considéré, suivi de 24 lignes contenant les pixels. Exemple: </p> <pre class="code"> 60 ................ ................ ................ ..........**.... .........***.... ........**...... .......**....... ......**........ .....**......... ....**.......... ...**........... ..***........... ...**........... ....**.......... .....**......... ......**........ .......**....... ........**...... .........***.... ..........**.... ................ ................ ................ ................ </pre> <p>Le nombre en première ligne est le code ascii du caractère, exprimé en décimal. En fait, ce n'est pas exactement le code ascii, puisque ça peut très bien être de l'iso-8859-1 par exemple, donc un code compris entre 0 et 255. Et les 24 lignes suivantes contienne le dessin du caractère fait avec des points et des étoiles. </p> <dl class="proto"> <dt>int Image_t16x24_txtload(char *fontname, U_BYTE *zone, int flag); <dd>Chargement d'une fonte à partir du fichier texte décrit plus haut. Le second paramètre est inutilisé. Le contenu de la fonte est stockée dans une zone statique privé, il est donc actuellement impossible de gérer plusieurs fontes simultanément. Le <tt>flag</tt> à 1 demande l'effacement préalable de cette zone statique. <dt>int Image_t16x24_pltch_exp(Image_Desc *img, int lettre, int xpos, int ypos); <dd>Dessin d'un caractère 16 x 24 dans une image, les noms des paramètres sont explicites. Les couleurs sont fixées. Aucun contrôle de débordement n'est fait. <dt>int Image_t16x24_pltch_1(Image_Desc *img, int lettre, int xpos, int ypos, RGBA *pap, RGBA *ink, int flags); <dd>Dessin d'un caractère 16 x 24 dans une image, les noms des paramètres sont presque explicites. La police doit être chargée à l'avance. <tt>flags</tt> doit être mis à 0. Aucun contrôle de débordement n'est fait. <dt>int Image_t16x24_allchars(char *fontname, char *tganame, int flag); <dd>Construction d'une image contenant le dessin des 256 caractères. </dl> <p>Voilà, c'est tout pour le moment, mais ça permet déja de faire des choses. Je continue à réfléchir aux nouveaux <i>features</i> que je vais pouvoir inventer. Restez à l'écoute... </p> <center><img src="all16x24chars.png"></center> <p class="HDP"><a href="#top">haut de page</a></p> <a name="outils"><h2>outils 16 x 24</h2></a> <p> Hop, hop, quelques trucs supplémentaires. Dans le <a href="libimage.tar.gz">tarball</a>, vous trouvererez <tt>fnt8to16</tt> qui convertit une fonte 8x8 en fonte 16x24. C'est un peu cru, il n'y a pas d'interpolation, mais ça donne de quoi faire.<p> <center><img src="bigthin.gif" width=488 height=181></center> <p>Dans le tarball vous trouverez la fonte ci-dessus (fichier <tt>16x24thin</tt>) qui sera installé comme les autres fontes. Dans les <a href="img-outils.html#mires">outils associés</a>, le programme <tt>tga_mires</tt> peut maintenant tracer le contenu d'une fonte 16x24, modulo le parsage des paramètres de la ligne de commande. </p> <p class="HDP"><a href="#top">haut de page</a></p> <h2><a name="gropixels">texte en 'gropixels'</a></h2> <p>Une nouveauté de 2014 (codenamed: <i>rouille de seiche</i>) encore très immature. Ces fonctions utilisent les <a href="#fontes">fontes</a> 8x8 mise aux échelles en X et en Y, sans interpolation, d'où le nom de <b>gropixels</b>. </p> <dl class="proto"> <dt>int Image_trace_big_char_0(Image_Desc *im, int x, int y, int code, int kx, int ky); <dd>Première version du tracé de caractère 'gropixels'. Les paramètres <tt>kx</tt> et <tt>ky</tt> sont les coefficients de mise à l'échelle. Il est nécessaire d'avoir préalablement chargé une fonte avec <tt>Image_load_fnt8x8</tt>. <dt>int Image_txt1_big_0(Image_Desc *im, char *txt, int x, int y, int xf, int yf); <dd>Première version du tracé de chaine en 'gropixels'. Hélas, pas de contrôle des limites, donc coredump presque assuré. </dl> <p class="HDP"><a href="#top">haut de page</a></p> <a name="liens"><h2>liens</h2></a> <p> Bah, euh... <a href="http://www.freetype.org/">Freetype</a>, par exemple. Mais je suis aussi à la recherche d'un format de fontes 'bitmap' évolué, bien documenté et disposant d'un éditeur sous <b>X11</b> facile d'utilisation. </p> <p class="footer"> <b>tTh</b>, éleveur de police depuis 1998...<br> Toujours à la recherche de trucs à faire dans le domaine de l'ascii-art...<br> <a href="#top">haut de page</a></p> </body> </html>