# Partie 2 (3H environ) : Manipulation d'image

## Objectifs du TP

    ((*<<)*>:)<<</~~^/:\::;^:/\\\:~v;*/vv;\)*()v/\/(\((v(:^:v(+)/+:~:/(+(;;v~:::(//:)++:)/::r(\)/
    <(<<>)<<:/:lr)+!~;(:/\\;:v\://i</</(*;\v))<*+/:)()vv</~:(*+):~)~\;v/v\iv~:::(;/:*;\:(\(:/)/(/
    <<<<<<<~=<nCsp]=~+\CpSyZt^://;/\i)/<*~//(><(;<<></(><:~/vv~)/~(;/;(/*:;<~:::(//:);/:(/(:i*/)\
    <)<<<vr/V3VP&&3>~<>;~\:r+(\;r;:=:::**~\:*<<:(<<<<;(<<)~~*v~((~:;;+:;*:;*^::;/;/+*+r:)/):/)/v/
    <)>*~x&&t*h?rT+/~.~~'^=~;v:;r/;~>;*;)~;)<<>:v<<><):<<(~~<*~(*~(\;\;\*~'^-\(`   _:'''^+*::*\)/
    <<<^x3&&&Gst*+^'   `<!   -\:\)+|<+*/>i;)><<(><<<<</<<+^^/;^;(^(\;/;i:.,`  `     ```_.+(::(/*:
    <*<^2VVVsJri'.    -.=!.`` -vr*+;</</>i;(<x<v<>><x<+*~.',-^,(/!(:\::/v\:<^~^---.;://<)/<::<:*v
    <v<*:vvv;:~' ,`    _.</~~++(v<;;>r</<;;v<>x:<<x><*;*^-.',~v(+~*/;/:\>/r^' ',`   `=:<(/>v:<(v:
    >*<<x<<<*)(+    .=+-\+:~~(~<v<;i>L<r<)v>x<f>:<<><~:(\^=;^^((~~v/;/(+<\:\':):'   '/:>::v/:((*)
    <vx<<<<<(((|l'  f}/sL^\^~*;*:>~ixewvxe4Gexzsrv)>(~*<v*/v:!~*/~*+:/*/>/r<~()\    -/:<(:*v:((v:
    <)<<<<<<(*)(i~ `|ivw~>:~;*/(:>L::(<Ls&K0aa0Gkx):/~)****v(/^<:~(~(/*\v:r<i((:.   +;;/::v/(::(/
    </><<<<(:(**()`_FoVr~(\^;*\:;a&2Y(xr<sF}s2333s*><~:((v(/<:^<*~)+(~*=v:;*~():;` .`  `,~(/:::(\
    >/<<<:(:~~~::/,/~sT;~;^'~(/:+fFF?1xLCy&&&000P<JZC:)**v(:<:^<*~(|v+:;::~-`,^~^- ` `--`-\/:/:\:
    <v</^/0^!..,'~++,~+()(^.;;;;ixo0&g&m&gX&&04k<(::\+(<<<(:((^((~v~<r(+/;```.!_' .   -.  -\(//:/
    <(~.~\V^^^.,,```_~i::/~^;(\;iV0XX555555g&3Gkx>;~;;<<<><v((~)v=>+<\T~:!''.;\``    ~i|  =\(/):/
    <(,^=+/((~ ^'  `~=~/++^-^^^^^/T~T5XXX&&&3S000Sr/;\<<>>>v;:~;T~:~:~\!^' '^~~      `:/- ^/:/v::
    <;:(>(v)~  `    :x^;;.`,`'`.._/*fVh(*V&300HX&&[+;;oo*<v://^i\~/^/^` `  ,`_+!'   ^!=``  `'~(::
    (:<(*:v)` '`    +x~irv'^!.=^!^^'~;^zw4O&&&0&4&*i*4&p<*()\/~;:~:^\~+..=~~--/v    -/!;'~!_.,/;/
    )((()(())+T~x):;=xl/(+=+.^~~~;^xw&ggggXXXO300P1zxf>>**((\)/~(~\!/^~+|/~!` '' ``  '-` `\;)\:+:
    (:(//::)(~,-,```/>|'|:r=/C(I(~v&X5XgX&XXb&P}C4&&3af<**<)r*(~(^\|/^~~|/+-   `!::;`   '~\;\/(~:
    )*(::::::,```/',^+\i+'<++<>\!(*4P4Y30230S0mkqXX&0Z><*>*)~*(~*~/!;^+!+:'   .::\/(/`  -i\/:/(;:
    <<(:/://:^```,',,`-\)\!.!~i~~(/C<>>hy000S0k<xVaPF\:**<*(~((~(|/!:~+|iv.` ,((:/:)(|   +/:(/:/:
    xzjjv<v(/!'  `!,-|-i>xv~:(\:<o*>^{{x~<CFFxsxxv~~~~;/<<*:~(:~v!(~:~;|+v+` ;:::/:::/  .;:::://:
    XX&&XX&X&k'` `qpx.^,<suswkC}uz:x;j)<~<x^shkx>:^~~^;\<<(v~)(~v!/!(~/+~)-  ^/://;(:/` ^;(//;/\\
    XXXXXXXXXk`'  +&&r,''+VXX55gggg5g5gggg555XX&&2aapwpppwwwuwsusLxIxL>:;>`  -;;+/;\:_   +;\~~^+;
    XXXXXXXXX&o+```sXk,~`'`^0g55555g555555gg55gg55555555555555g550k?r~~^!|iLna&0Ps*r^-_.=ouoL::~~
    X5XXXX5XXXk_``=&X5S&s```)X55555gg5555555g555555555gg2k7T\~'^!|icop&&X0V?T~'_=:xs2g55g5gg55gg5
    XX555XgXXF>vi.&XXgX&Y'``aXgg5X5555555555550VF*\~',-_!icop05ggg0h*r~'_.;ns4ggggg5g55555g555555
    XXXXXXXXS?&X[^aXXXXf\=.~&555XXX550sF*r^,,_.|ivnsa&g5g53VF*\~'.=Lnsmggg55g5g55555g55gg5g555555
    XXXXXXXX/T(T~0XXXXPs&(f^w7T;^',_'_|=Lco0g5g55g5&UF*\^''=ixs0g5gg555555g555g55g55g5555g55g5g55
    XXXXXXXe~~``*r~/h?~*Y+!  `!iLxopSX55555&aF*~'-'.=Lxsa&5555g555g5555555g5ggg55gg55555555555555
    XXXX&&p\T-`.````_.,i,`oP3XXX5gXgGk*~',``_|ivzp&g55555g55555555g5555555g555555555555555g5g5555
    XXX4:~o=-_ivnw0XXr+-``'~?*T~,,,``_!ivo3gg5gg555555g55ggg5gg555555g55555g5gg5555g5555555555555
    XXX&ppXXXXXX&FfkF-~,r-````_|:xsS55gg5g555g555555555555555555g555555g5g5g5555555g555555555g555
    XXXgXXXggXXXk1*0&si~\vopXg55g555g5555g55555g55555g5g555g555555555555g555g55g55555555g555g5555

- Afficher et transformer une image (parcours d'image et utilisation de l'acteur graphique.)

## Acteurs utilisés

- L'acteur JPG
- L'acteur Gada.Graphics
- L'acteur Gada.Plus

## Consignes

- Dans votre dossier algo2, copiez une image JPG de bon goût, de taille maximale 800x600 qui n'ait aucun axe de symétrie. À défaut, prenez cette affiche de film (clic-droit sur le lien : enregistrer la cible du lien...)
- Écrivez un nouveau programme `Mission2`, ajoutez une procédure `Afficher_Image` qui prend en argument une image (de type T_Image) et qui l'affiche.
  Le type T_Image est défini dans l'acteur JPG et l'affichage se fait grâce à l'acteur Gada.Graphics.
- Écrivez une procédure de test `Tester_Afficher_Image` qui demande à l'utilisateur de choisir un fichier jpg et qui l'affiche. Voyez l'acteur Gada.Plus pour choisir un fichier. Rappelez-vous qu'on ne définit pas de variable de type String, seulement des constantes, avant le `begin`.
  Il n'est pas nécessaire de donner la taille d'un tableau ou d'une matrice lorsqu'on l'initialise immédiatement, par exemple `ZImage : T_Image := (quelque chose de type T_Image) ;`
- Modifiez la procédure Afficher_Image pour qu'elle prenne deux arguments supplémentaires : les coordonnées où l'on veut afficher l'image. Testez en ouvrant une fenêtre deux fois plus large et deux fois plus haute que l'image, et en affichant l'image décalée de +(120,80).
- En créant quatre variantes de votre procédure d'affichage, afficher l'image avec différents filtres :
  - Une fois en normal (Afficher_Image)
  - En permutant les composantes rouge, verte, bleue (par exemple, la composante verte prend la valeur du rouge, et la composante rouge prend la valeur du bleu, etc.).
  - En négatif (chaque couleur x devient 255-x)
  - En noir et blanc (tons de gris, obtenus en prenant chaque composante égale à la luminosité). La luminosité d'un pixel se calcule en faisant la moyenne des trois couleurs (en réalité, la moyenne devrait être pondérée en fonction de la sensibilité de l'oeil humain aux différentes couleurs).
- (À laisser si vous êtes en retard) : Effectuez maintenant les opérations suivantes sur votre image :
  - "Floutage" (rendre l'image floue) : on rend l'image floue en remplaçant chaque pixel par une moyenne pondérée du pixel considéré et de ses voisins (les voisins ont un coefficient plus faible que le pixel du milieu). Pour flouter davantage, moyenner les voisins jusqu'à une distance de 2, 3, 4, etc.
  - Détection de contours : remplacer chaque pixel par le gradient de la luminosité au point considéré. Pour ceux qui ont peur des gradients, ne prendre que le gradient horizontal, i.e. la dérivée de la luminosité selon l'axe des X. Voir filtre de Sobel sur Wikipedia.