typedef unsigned char DATATYPE; Pixel code sur 1 octet non signe.
typedef struct SIMPLE_IMAGE { int nlig; nombre de points par ligne. int ncol; nombre de points par colonne. int nplane; nombre de plans dans l'image. int depth; nombre de bits par point (1, 8, 16 ou 32 bits). int hexa; flag: si > 0 la maille est hexagonale. int x,y,z; coordonnees du point chaud d'un kernel. DATATYPE *imagedata; pointeur sur le debut de l'image. }SIMPLE_IMAGE; typedef SIMPLE_IMAGE *IMAGE ;Representation des pixels d'une image en memoire:
Prenons l'exemple d'une image 3D a 3 plans ---------- | Plan 2 | ---------- | | Plan 1 | | ---------- | | | Plan 0 | | | | | |-- | | | | |-- | | ---------- La variable pointeur imagedata pointe en premier sur les points du plan 0 puis celui du plan 1 et en dernier celui du plan 2: M E M O I R E | | imagedata-->|--------| | | | Plan 0 | | | |--------| | | | Plan 1 | | | |--------| | | | Plan 1 | | | |--------| | | La figure ci-dessous montre un plan de 3 x 3 pixels et sa reprensentation en memoire: M E M O I R E . . . . P L A N 0 |-------| imagedata-->| 0 | ----------------- |-------| | | | | | 1 | | 0 | 1 | 2 | |-------| | | | | | 2 | ----------------- |-------| | | | | | 3 | | 3 | 4 | 5 | |-------| | | | | | 4 | ----------------- |-------| | | | | | 5 | | 6 | 7 | 8 | |-------| | | | | | 6 | ----------------- |-------| | 7 | |-------| | 8 | |-------| | 9 | |-------| . . Plan suivant... . . Pour atteindre un point de l'image de coordonnee (C, L, P) ou C est le numero de colonne (0 <= L < ncol), L est le numero de ligne (0 <= L < nlig) et P le numero de plan (0 <= P < nplane), il faut calculer le deplacement necessaire a ajouter au pointeur imagedata pour avoir l'emplacement memoire qui contient ce point soit : (P * ncol * nlig) + (L * nlig) + C Remarque: Ce deplacement est uniquement valable pour les points codes sur 8 bits. Pour simplifier votre programmation, la librairie KDG contient des macros qui vous donne l'adresse de n'importe qu'elle point d'une image quelque soit le type de codage de ses points.
Des questions ? Eric Llorens