105 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<html>
 | 
						|
<head>
 | 
						|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 | 
						|
<title>libimage: les listes de points</title>
 | 
						|
<link rel="stylesheet" type="text/css" href="libimage.css">
 | 
						|
<meta name="generator" content="Vim et huile de phalange">
 | 
						|
<meta name="keywords" content="libimage, Boudet, liste de points">
 | 
						|
</head>
 | 
						|
 | 
						|
<body>
 | 
						|
 | 
						|
<h1>libimage: les listes de points</h1>
 | 
						|
 | 
						|
<p align=center>
 | 
						|
<tt>dernière mise à jour: 15 octobre 2013</tt><br>
 | 
						|
</p>
 | 
						|
 | 
						|
<p>L'origine de ce concept se perd dans la nuit des temps, probablement
 | 
						|
aux alentours de 1998... Je n'ai pas le moindre souvenir de pourquoi j'ai
 | 
						|
commencé à imaginer ça. Mais il y a déja un peu de code écrit, autant
 | 
						|
que ça serve à quelque chose. Commençons par les concepts de base.
 | 
						|
</p>
 | 
						|
 | 
						|
<h2>Un point et une liste de points, c'est quoi ?</h2>
 | 
						|
 | 
						|
<p>
 | 
						|
Comme un point se réfère à une image, il va forcément avoir les
 | 
						|
coordonnées d'un pixel, donc un tuple <tt>x,y</tt>. Ensuite, nous avons
 | 
						|
deux attributs: le premier est assimilable à la "hauteur" de
 | 
						|
ce point dans le champ virtuel du monde pixelisé, et le second
 | 
						|
est laissé à l'imagination du codeur (pourquoi pas un index dans une
 | 
						|
<small>LUT</small> de couleurs ?) qui veut utiliser le kluge.
 | 
						|
 | 
						|
Pour des raisons historiques d'occupation mémoire, toutes ces coordonnées sont
 | 
						|
stockées sur 16 bits. Désolé.
 | 
						|
</p>
 | 
						|
 | 
						|
<pre class=code>
 | 
						|
typedef struct
 | 
						|
	{
 | 
						|
	short		x, y;			/* pixel position */
 | 
						|
	short		h;			/* pixel value */
 | 
						|
	short		c;			/* color index ? */
 | 
						|
	} Image_Point;
 | 
						|
</pre>
 | 
						|
 | 
						|
<p>
 | 
						|
Ensuite, pour manipuler des ensembles de points, nous les regrouperons dans
 | 
						|
des listes de, justement, points. A priori, le descripteur d'une liste de
 | 
						|
points n'est pas une structure publique, du moins, tant qu'elle n'est
 | 
						|
pas à peu près figée.
 | 
						|
</p>
 | 
						|
 | 
						|
<h2>Fonctions de bases</h2>
 | 
						|
 | 
						|
 | 
						|
<dl class="proto">
 | 
						|
 | 
						|
<dt>Image_PtList * Image_ptl_alloc(int nbre, char *name);
 | 
						|
<dd>Allocation d'une liste de points. <tt>nbre</tt> étant le nombre
 | 
						|
de points initialement alloués et <tt>name</tt> un texte arbitraire
 | 
						|
d'une taille limitée. La taille est dynamique, c'est à dire qu'une liste
 | 
						|
de points peut grossir à la demande.
 | 
						|
 | 
						|
<dt>int Image_ptl_kill(Image_PtList *ptl, char *msg);
 | 
						|
<dd>Destruction d'une liste et probable récupération de la mémoire
 | 
						|
utilisée. Si <tt>NULL != msg</tt>, un message est éventuellement
 | 
						|
affiché sur stderr.
 | 
						|
 | 
						|
<dt>int Image_ptl_get_size(Image_PtList *ptl, int *nbre, int *alloc);
 | 
						|
<dd>Récupère le nombre de points effectif dans la liste, et la place
 | 
						|
disponible actuelle. On peut passer <tt>NULL</tt> si on ne veut pas
 | 
						|
récupérer une des valeurs.
 | 
						|
 | 
						|
<dt>int Image_ptl_add(Image_PtList *ptl, int x, int y, int h, int c);
 | 
						|
<dd>Ajout d'un point à une liste, en augmentant éventuellement la 
 | 
						|
taille de celle-ci, la taille de la liste étant limité par la mémoire
 | 
						|
disponible, au bon vouloir du <small>OOMK</small> farceur. Il n'est 
 | 
						|
actuellement pas possible d'enlever un point de la liste.
 | 
						|
 | 
						|
<dt>int Image_ptl_get(Image_PtList *ptl, Image_Point *pt, int idx);
 | 
						|
<dd>Lecture d'un point depuis une liste. Coredumpe peut-être,
 | 
						|
mais pas trop souvent.
 | 
						|
 | 
						|
<dt>int Image_ptl_boundingbox(Image_PtList *ptl, Image_Rect *box);
 | 
						|
<dd>Calcul de la boite qui englobe en x/y tous les points d'une liste.
 | 
						|
Il traine probablement une <i>off-by-one</i> erreur dans le code.
 | 
						|
Utilisez <a href="libimage.html#tools">Image_dump_rect</a> pour afficher
 | 
						|
le résultat.
 | 
						|
 | 
						|
</dl>
 | 
						|
 | 
						|
 | 
						|
<p>
 | 
						|
On peut, bien entendu, mettre ces listes de points dans des
 | 
						|
<a href="img-fichiers.html#ptl">fichiers</a>.
 | 
						|
</p>
 | 
						|
 | 
						|
 | 
						|
 | 
						|
<p class="HDP"><a href="#top">haut de page</a></p>
 | 
						|
</body>
 | 
						|
</html>
 | 
						|
 |