* Manipulation de tableaux à deux dimensions en `C`.
* Utilisation de `git`.
* Utilisation de librairies externe.
* Utilisation de pointeurs constants.
* Lecture et écriture de fichiers binaires.
* Utilisation de types énumérés.
* Affichage graphique avec la librairie `SDL`.
...
...
@@ -135,7 +135,7 @@ maximale permise. Ainsi si on représente `max` niveaux de gris, le négatif d'u
Il faut implémenter **au minimum** la fonction suivante:
* la fonction `pgm_error pmg_negative(pgm *neg, pgm *orig)`{.C} calculant le négatif de l'image `orig`et la stockant dans `neg` (qui également allouée dans cette fonction). L'image `orig` n'est pas modifiée. Cette fonction retourne un `pgm_error`.
* la fonction `pgm_error pmg_negative(pgm *neg, const pgm *const orig)`{.C} calculant le négatif de l'image `orig`et la stockant dans `neg` (qui également allouée dans cette fonction). L'image `orig` n'est pas modifiée. Cette fonction retourne un `pgm_error`.
## Les symétries
...
...
@@ -149,9 +149,9 @@ Vous pouvez voir un exemple de ces trois symétries à la @fig:baboon_sym
Il faut implémenter **au minimum** les fonctions suivantes:
* la fonction `pgm_error pmg_symmetry_hori(pgm *sym, pgm *orig)`{.C} calculant la symétrie horizontale de l'image `orig` et la stockant dans `sym` (qui également allouée dans cette fonction). L'image `orig` n'est pas modifiée. Cette fonction retourne un `pgm_error`.
* la fonction `pgm_error pmg_symmetry_vert(pgm *sym, pgm *orig)`{.C} calculant la symétrie verticale de l'image `orig` et la stockant dans `sym` (qui également allouée dans cette fonction). L'image `orig` n'est pas modifiée. Cette fonction retourne un `pgm_error`.
* la fonction `pgm_error pmg_symmetry_cent(pgm *sym, pgm *orig)`{.C} calculant la symétrie centrale de l'image `orig` et la stockant dans `sym` (qui également allouée dans cette fonction). L'image `orig` n'est pas modifiée. Cette fonction retourne un `pgm_error`.
* la fonction `pgm_error pmg_symmetry_hori(pgm *sym, const pgm *const orig)`{.C} calculant la symétrie horizontale de l'image `orig` et la stockant dans `sym` (qui également allouée dans cette fonction). L'image `orig` n'est pas modifiée. Cette fonction retourne un `pgm_error`.
* la fonction `pgm_error pmg_symmetry_vert(pgm *sym, const pgm *const orig)`{.C} calculant la symétrie verticale de l'image `orig` et la stockant dans `sym` (qui également allouée dans cette fonction). L'image `orig` n'est pas modifiée. Cette fonction retourne un `pgm_error`.
* la fonction `pgm_error pmg_symmetry_cent(pgm *sym, const pgm *const orig)`{.C} calculant la symétrie centrale de l'image `orig` et la stockant dans `sym` (qui également allouée dans cette fonction). L'image `orig` n'est pas modifiée. Cette fonction retourne un `pgm_error`.
## Le photomaton
...
...
@@ -173,7 +173,7 @@ il faut examiner ce qui se passe sur la première ligne.
Il faut implémenter **au minimum** la fonction suivante:
* la fonction `pgm_error pmg_photomaton(pgm *photomaton, pgm *orig)`{.C} calculant l'effet photomaton de l'image `orig` et la stockant dans `photomaton` (qui également allouée dans cette fonction). L'image `orig` n'est pas modifiée. Cette fonction retourne un `pgm_error`.
* la fonction `pgm_error pmg_photomaton(pgm *photomaton, const pgm *const orig)`{.C} calculant l'effet photomaton de l'image `orig` et la stockant dans `photomaton` (qui également allouée dans cette fonction). L'image `orig` n'est pas modifiée. Cette fonction retourne un `pgm_error`.
## Rogner
...
...
@@ -186,7 +186,7 @@ des pixels de l'image d'origine. Un exemple peut se trouver sur la @fig:baboon_c
Il faut implémenter **au minimum** la fonction suivante:
* la fonction `pgm_error pmg_crop(pgm *crop, pgm *orig, int32_t x0, int32_t x1, int32_t y0, int32_t y1)`{.C} calculant la sous-image de `orig` aux coordonnées `x0` à `x1` (non-inclu), et `y0` à `y1` (non-inclu). Le résultat est stocké dans `crop` (qui également allouée dans cette fonction). L'image `orig` n'est pas modifiée. Cette fonction retourne un `pgm_error`.
* la fonction `pgm_error pmg_crop(pgm *crop, const pgm *const orig, int32_t x0, int32_t x1, int32_t y0, int32_t y1)`{.C} calculant la sous-image de `orig` aux coordonnées `x0` à `x1` (non-inclu), et `y0` à `y1` (non-inclu). Le résultat est stocké dans `crop` (qui également allouée dans cette fonction). L'image `orig` n'est pas modifiée. Cette fonction retourne un `pgm_error`.
## Convolution et filtres [^1]
...
...
@@ -284,7 +284,7 @@ tronquer le nombre obtenu pour en fait un entier.
Il faut implémenter **au minimum** la fonction suivante:
* la fonction `pgm_error pmg_conv(pgm *conv, pgm *orig, matrix *kernel)`{.C} calculant la convolution entre `orig` et le noyau `kernel`. Le résultat est stocké dans `conv` (qui également allouée dans cette fonction). L'image `orig` n'est pas modifiée. Cette fonction retourne un `pgm_error`.
* la fonction `pgm_error pmg_conv(pgm *conv, const pgm *const orig, const matrix *const kernel)`{.C} calculant la convolution entre `orig` et le noyau `kernel`. Le résultat est stocké dans `conv` (qui également allouée dans cette fonction). L'image `orig` n'est pas modifiée. Cette fonction retourne un `pgm_error`.