Skip to content
Snippets Groups Projects
Unverified Commit fbdcd08c authored by orestis.malaspin's avatar orestis.malaspin
Browse files

mise a jour avec details et sdl

parent a031f307
Branches
No related tags found
No related merge requests found
Pipeline #12554 passed
......@@ -115,7 +115,7 @@ Afin de tester vos fonctions vous pouvez utiliser l'image du babouin (voir @fig:
![Image d'un babouin.](figs/baboon.png){#fig:baboon width=50%}
### Quelques fonctions à implémenter
### Fonctions à implémenter
Il faut implémenter **au minimum** les fonctions suivantes:
......@@ -131,6 +131,12 @@ maximale permise. Ainsi si on représente `max` niveaux de gris, le négatif d'u
![L'original (image de gauche) et le négatif (image de droite) de la photo du babouin.](figs/baboon_negative.png){#fig:baboon_negative}
### Fonctions à implémenter
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`.
## Les symétries
Une symétrie verticale ou horizontale consiste à inverser l'ordre des pixels verticalement ou horizontalement
......@@ -139,6 +145,15 @@ Vous pouvez voir un exemple de ces trois symétries à la @fig:baboon_sym
![Exemple de symétrie horizontale (2 images de gauche), verticale (2 images du centre), et centrale (2 images de droite).](figs/baboon_sym.png){#fig:baboon_sym}
### Fonctions à implémenter
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`.
## Le photomaton
Une étape du photomaton consiste à reproduire l'image donnée 4 fois en 4 fois plus petite.
......@@ -154,6 +169,12 @@ Pour une image de dimension $8\times 8$, la transformation peut s'observer sur l
A partir de cet exemple généraliser cette transformation pour chaque groupe de 4 pixels. Pour bien comprendre la transformation,
il faut examiner ce qui se passe sur la première ligne.
### Fonctions à implémenter
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`.
## Rogner
Le rognage d'une image est une opération assez simple. Elle consiste à extraire une sous partie rectangulaire
......@@ -161,6 +182,12 @@ des pixels de l'image d'origine. Un exemple peut se trouver sur la @fig:baboon_c
![Rognage de la photo de babouin.](figs/baboon_crop.png){#fig:baboon_crop width=100%}
### Fonctions à implémenter
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`.
## Convolution et filtres [^1]
Explication dans la documentation de gimp : [https://docs.gimp.org/2.8/fr/plug-in-convmatrix.html](https://docs.gimp.org/2.8/fr/plug-in-convmatrix.html)
......@@ -253,9 +280,24 @@ une valeur plus petite que zéro. Dans ces cas il faudra ramener les valeurs dan
Par ailleurs, il se peut que la valeur des pixels ne soit plus entière. Il faudra donc
tronquer le nombre obtenu pour en fait un entier.
### Fonctions à implémenter
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`.
## Afficher l'image avec la librairie SDL
Uniquement une fois réalisées toutes les parties qui précèdent **en entier**,
afficher les images en niveau de gris à l'aide de la librairie `SDL2`.
Vous trouverez toutes les fonctions nécessaires dans l'exemple se trouvant sur [ce lien](https://malaspinas.academy/prog_seq_c_tp/tableaux_unidimensionnels/gfx_example.tar.gz). Cet exemple affiche du bruit (des valeurs de gris aléatoires
sur un grand nombre de pixels). Vous **devez** réutiliser les fonctions se trouvant dans cet exemple qui sont là pour vous faciliter la vie (et non tenter de réinventer la roue).
Le code dont vous devez vous inspirer est dans le fichier `gfx_example.c` (qui utilise `gfx.h/c`).
Outre les fonctions de création/destruction du contexte, la fonction importante
est `render()`{.C} qui affiche un pixel à la position `x`, `y` à un niveau de gris `color`,
à l'aide de la fonction `put_pixel()`{.C}.
[^1]: Repris du cours de math de N. Eggenberg et O. Malaspinas
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment