118 | | Ecrivez le fichier operate.C (ainsi que le fichier associé operate.h), qui contient la fonction operate(). |
119 | | Cette fonction prend en entrée une image définie par un pointeur sur une structure de donnée gmap. Elle applique séquenciellement les transformations définies dans le fichier de commandes, et renvoie un pointeur sur la structure de donnée gmap contenant l'image résultante. |
| 118 | Ecriver le fichier operate.C (ainsi que le fichier associé operate.h), qui contient la fonction operate(). |
| 119 | Cette fonction prend en entrée une image définie par un pointeur sur une structure de donnée gmap. |
| 120 | Elle applique séquenciellement les transformations définies dans le fichier de commandes, |
| 121 | et renvoie un pointeur sur la structure de donnée gmap contenant l'image résultante. |
| 125 | On définira une fonction par type de commandes. Ces 7 fonctions prennent pour nom le caractère |
| 126 | définissant la commande, et possèdent deux arguments: un pointeur sur l'image source, et un pointeur |
| 127 | sur l'image résultat. Les deux structures de données doivent donc avoir été allouées en mémoire |
| 128 | préalablement (pas de malloc() dans ces fonctions. |
| 129 | {{{ |
| 130 | void X(gmap *mapin, gmap *mapout); |
| 131 | } |
| 132 | Pour cette étape, les fonctions de traitement se contentent de recopier mapin dans mapout, |
| 133 | et d'afficher le message: |
| 134 | {{{ |
| 135 | Operation X non implementee |
| 136 | }} |
124 | | = Etape 4 : Fonctions de traitement de l'image = |
| 138 | = Etape 4 : opérations S,X,Y,P,M = |
| 139 | |
| 140 | Implémentez successivement les fonctions S, X, Y P, M. |
| 141 | Il faut calculer tous les pixels de l'image, en exécutant deux boucles for imbriquées |
| 142 | pour parcourir les lignes et les colonnes. Le coeur de ces fonctions sera toujours |
| 143 | de la forme : |
| 144 | {{{ |
| 145 | for(y = 0 ; y < heigth ; y++) { |
| 146 | for(x = 0 ; x < width ; x++) { |
| 147 | ELM(mapout, U(x,y), V(x,y)) = ELM(mapin, x, y); |
| 148 | } |
| 149 | } |
| 150 | }}} |
| 151 | Pour alléger l'écriture, on définira la macro ELM(map,x,y) qui permet de désigner |
| 152 | le pixel de coordonnées (x,y) dans l'image désignée par le pointeur map. |
| 153 | {{{ |
| 154 | #define ELM(map,x,y) map->raster[y*map->width + x] |
| 155 | }}} |
| 156 | La difficulté est évidedmment de définir les expressions arithmétiques |
| 157 | U(x,y) et V(x,y) pour chacune des opérations à implémenter. |
| 158 | |
| 159 | = Etape 5 : = |