just adding files

This commit is contained in:
Mythrann 2021-02-10 22:10:02 +01:00
parent 54bdab9307
commit 811d7ff994
10 changed files with 246 additions and 0 deletions

View file

@ -0,0 +1,64 @@
<!DOCTYPE html>
<!-- Page generated by OCaml with Ocsigen.
See http://ocsigen.org/ and http://caml.inria.fr/ for information -->
<html class="ada2" lang="fr" id="h" xmlns="http://www.w3.org/1999/xhtml"><head><title>gada-graphics.ads</title><meta content="text/html; charset=utf-8" http-equiv="content-type"/><link media="all" href="../../ystyle.css" rel="stylesheet"/><script src="../../Scripts/yfold.js"></script></head><body><div class="header" id="header"><h1 id="title">gada-graphics.ads</h1></div><main><code class="page block"><span class="kw">package</span> <span class="fname">GAda.Graphics</span> <span class="kw">is</span><span class="eols">
</span> <span class="comment">--
</span> <span class="comment">-- Attention, l'axe des Y est vers le haut.
</span> <span class="comment">--
</span><span class="eols">
</span> <span class="comment">-- Trace un point noir aux coordonnées X,Y
</span> <span class="kw">procedure</span> <span class="fname">BlackPoint</span>(<span class="ident">X</span>, <span class="ident">Y</span> : <span class="type">Integer</span>) ;<span class="eols">
</span> <span class="comment">-- Redimensionne la fenêtre graphique, et efface l'image courante.
</span> <span class="comment">-- Largeur et hauteur sont en pixels (points)
</span> <span class="kw">procedure</span> <span class="fname">Resize</span>(<span class="ident">Largeur</span> : <span class="type">Integer</span> ; <span class="ident">Hauteur</span> : <span class="type">Integer</span>) ;<span class="eols">
</span> <span class="comment">-- Une couleur est caractérisée par trois composantes
</span> <span class="comment">-- rouge, vert, bleu, dont la valeur va de 0 (pas de couleur) à 255 (couleur vive).
</span> <span class="comment">-- Une couleur est donc un triplet de trois entiers entre 0 et 255.
</span> <span class="comment">--
</span> <span class="comment">-- Par exemple, le blanc correspond à (255,255,255), le rouge à (255,0,0)
</span> <span class="comment">-- et le violet à (255,0,255) car c'est un mélange de rouge et de bleu.
</span> <span class="comment">--
</span> <span class="kw">type</span> <span class="type">T_Couleur</span> <span class="kw">is</span> <span class="kw">record</span>
<span class="ident">Rouge</span> : <span class="type">Integer</span> <span class="kw">range</span> <span class="number">0</span>..<span class="number">255</span> ;
<span class="ident">Vert</span> : <span class="type">Integer</span> <span class="kw">range</span> <span class="number">0</span>..<span class="number">255</span> ;
<span class="ident">Bleu</span> : <span class="type">Integer</span> <span class="kw">range</span> <span class="number">0</span>..<span class="number">255</span> ;
<span class="kw">end</span> <span class="kw">record</span> ;<span class="eols">
</span> <span class="comment">-- Trace un point de la couleur indiquée
</span> <span class="kw">procedure</span> <span class="fname">ColorPoint</span>(<span class="ident">X</span>, <span class="ident">Y</span> : <span class="type">Integer</span> ; <span class="ident">Coul</span> : <span class="type">T_Couleur</span>) ;<span class="eols">
</span> <span class="comment">-- Trace une ligne entres les points (X1,Y1) et (X2,Y2)
</span> <span class="kw">procedure</span> <span class="fname">ColorLine</span>(<span class="ident">X1</span>, <span class="ident">Y1</span>, <span class="ident">X2</span>, <span class="ident">Y2</span> : <span class="type">Integer</span> ; <span class="ident">Coul</span> : <span class="type">T_Couleur</span>) ;<span class="eols">
</span> <span class="comment">-- Idem, mais la ligne est noire
</span> <span class="kw">procedure</span> <span class="fname">BlackLine</span>(<span class="ident">X1</span>, <span class="ident">Y1</span>, <span class="ident">X2</span>, <span class="ident">Y2</span> : <span class="type">Integer</span>) ;<span class="eols">
</span> <span class="comment">-- Trace un cercle (vide) ou un disque (plein) centré en (X, Y) et du rayon indiqué.
</span> <span class="kw">procedure</span> <span class="fname">Cercle</span>(<span class="ident">X</span>, <span class="ident">Y</span>, <span class="ident">Rayon</span> : <span class="type">Integer</span> ; <span class="ident">Coul</span> : <span class="type">T_Couleur</span>) ;
<span class="kw">procedure</span> <span class="fname">Disque</span>(<span class="ident">X</span>, <span class="ident">Y</span>, <span class="ident">Rayon</span> : <span class="type">Integer</span> ; <span class="ident">Coul</span> : <span class="type">T_Couleur</span>) ;<span class="eols">
</span> <span class="comment">-- Trace un rectangle coloré
</span> <span class="kw">procedure</span> <span class="fname">ColorRectangle</span>(<span class="ident">X</span>, <span class="ident">Y</span>, <span class="ident">Largeur</span>, <span class="ident">Hauteur</span> : <span class="type">Integer</span> ; <span class="ident">Coul</span> : <span class="type">T_Couleur</span>) ;<span class="eols">
</span> <span class="comment">-- Met (Flag =&gt; true) ou enlève (Flag =&gt; false) la marge grise.
</span> <span class="kw">procedure</span> <span class="fname">Avec_Marge</span>(<span class="ident">Flag</span> : <span class="type">Boolean</span>) ;<span class="eols">
</span> <span class="comment">--
</span> <span class="comment">-- Ignorez cette partie
</span> <span class="comment">-- qui sert à optimiser la mémoire
</span> <span class="comment">--
</span> <span class="kw">for</span> <span class="ident">T_Couleur</span> <span class="kw">use</span> <span class="kw">record</span>
<span class="ident">Rouge</span> <span class="kw">at</span> <span class="number">0</span> <span class="kw">range</span> <span class="number">0</span>..<span class="number">7</span>;
<span class="ident">Vert</span> <span class="kw">at</span> <span class="number">0</span> <span class="kw">range</span> <span class="number">8</span>..<span class="number">15</span>;
<span class="ident">Bleu</span> <span class="kw">at</span> <span class="number">0</span> <span class="kw">range</span> <span class="number">16</span>..<span class="number">23</span>;
<span class="kw">end</span> <span class="kw">record</span>;<span class="eols">
</span><span class="kw">end</span> <span class="fname">GAda.Graphics</span> ;
</code></main><footer><small class="pcom"><a class="caml_c" href="../../yversion.html" data-eliom-c-onclick="WL9oinEbtDi9">Version information</a></small><a target="_blank" href="http://www.insa-toulouse.fr"><img title="INSA Toulouse" style="width:73px;height:28px;" alt="INSA logo" src="../../Images/logo-insa-light.jpg"/></a><a target="_blank" href="http://jigsaw.w3.org/css-validator/check/referer"><img title="Validate css stylesheet" style="width:28px;height:32px;" alt="CSS3 logo" src="../../Images/css3.png"/></a><a target="_blank" href="http://validator.w3.org/check/referer"><img title="Validate html5 content" style="width:32px;height:32px;" alt="HTML5 logo" src="../../Images/html5.png"/></a></footer></body></html>

View file

@ -0,0 +1,15 @@
<!DOCTYPE html>
<!-- Page generated by OCaml with Ocsigen.
See http://ocsigen.org/ and http://caml.inria.fr/ for information -->
<html class="ada2" lang="fr" id="h" xmlns="http://www.w3.org/1999/xhtml"><head><title>gada-plus.ads</title><meta content="text/html; charset=utf-8" http-equiv="content-type"/><link media="all" href="../../ystyle.css" rel="stylesheet"/><script src="../../Scripts/yfold.js"></script></head><body><div class="header" id="header"><h1 id="title">gada-plus.ads</h1></div><main><code class="page block"><span class="kw">package</span> <span class="fname">GAda.Plus</span> <span class="kw">is</span><span class="eols">
</span> <span class="comment">-- Cette fonction ouvre une nouvelle fenêtre (fenêtre de dialogue)
</span> <span class="comment">-- et demande à l'utilisateur de cliquer sur un fichier.
</span> <span class="comment">--
</span> <span class="comment">-- Elle renvoie le nom du fichier cliqué
</span> <span class="comment">-- ou la chaîne vide &quot;&quot; si rien n'a été choisi.
</span> <span class="comment">--
</span> <span class="kw">function</span> <span class="fname">Choisir_Fichier</span> <span class="kw">return</span> <span class="type">String</span> ;<span class="eols">
</span><span class="kw">end</span> <span class="fname">GAda.Plus</span> ;
</code></main><footer><small class="pcom"><a class="caml_c" href="../../yversion.html" data-eliom-c-onclick="AnWUvvThhNOP">Version information</a></small><a target="_blank" href="http://www.insa-toulouse.fr"><img title="INSA Toulouse" style="width:73px;height:28px;" alt="INSA logo" src="../../Images/logo-insa-light.jpg"/></a><a target="_blank" href="http://jigsaw.w3.org/css-validator/check/referer"><img title="Validate css stylesheet" style="width:28px;height:32px;" alt="CSS3 logo" src="../../Images/css3.png"/></a><a target="_blank" href="http://validator.w3.org/check/referer"><img title="Validate html5 content" style="width:32px;height:32px;" alt="HTML5 logo" src="../../Images/html5.png"/></a></footer></body></html>

View file

@ -0,0 +1,40 @@
<!DOCTYPE html>
<!-- Page generated by OCaml with Ocsigen.
See http://ocsigen.org/ and http://caml.inria.fr/ for information -->
<html class="ada2" lang="fr" id="h" xmlns="http://www.w3.org/1999/xhtml"><head><title>jpg.ads</title><meta content="text/html; charset=utf-8" http-equiv="content-type"/><link media="all" href="../../ystyle.css" rel="stylesheet"/><script src="../../Scripts/yfold.js"></script></head><body><div class="header" id="header"><h1 id="title">jpg.ads</h1></div><main><code class="page block"><span class="comment">--
</span><span class="comment">-- Ce package permet de lire une image contenue dans un fichier JPG
</span><span class="comment">-- ou d'écrire une image vers un fichier JPG.
</span><span class="comment">--
</span><span class="comment">-- (Utilise simple_jpeg_lib et libjpeg)
</span><span class="comment">--
</span>
<span class="kw">with</span> <span class="ident">GAda.Graphics</span> ;<span class="eols">
</span><span class="kw">package</span> <span class="fname">JPG</span> <span class="kw">is</span><span class="eols">
</span> <span class="comment">--
</span> <span class="comment">-- Une image est une matrice dont chaque case représente un point coloré.
</span> <span class="comment">--
</span> <span class="kw">type</span> <span class="type">T_Image</span> <span class="kw">is</span> <span class="kw">array</span>(<span class="ident">Natural</span> <span class="kw">range</span> &lt;&gt;, <span class="ident">Natural</span> <span class="kw">range</span> &lt;&gt;) <span class="kw">of</span> <span class="ident">GAda.Graphics.T_Couleur</span> ;<span class="eols">
</span> <span class="comment">--
</span> <span class="comment">-- Lit un fichier contenant une image JPEG et renvoie une matrice
</span> <span class="comment">-- contenant les pixels de l'image.
</span> <span class="comment">--
</span> <span class="comment">-- Les lignes et colonnes commencent à zéro.
</span> <span class="comment">-- L'origine de la matrice (0,0) est située en haut à gauche de l'image.
</span> <span class="comment">-- Comme d'habitude, le premier indice est le numéro de ligne, le deuxième indice le numéro de colonne.
</span> <span class="comment">--
</span> <span class="kw">function</span> <span class="fname">Lire_Image</span> (<span class="ident">Nom_Image</span> : <span class="type">String</span>) <span class="kw">return</span> <span class="type">T_Image</span> ;<span class="eols">
</span>
<span class="comment">--
</span> <span class="comment">-- Crée sur le disque dur un fichier JPG contenant l'image
</span> <span class="comment">-- Vous n'avez en principe pas besoin de cette procedure pendant les TPs.
</span> <span class="comment">--
</span> <span class="kw">procedure</span> <span class="fname">Ecrire_Fichier</span> (<span class="ident">Nom_Image</span> : <span class="type">String</span> ; <span class="ident">Matrice</span> : <span class="type">T_Image</span>) ;<span class="eols">
</span><span class="kw">end</span> <span class="fname">JPG</span> ;
</code></main><footer><small class="pcom"><a class="caml_c" href="../../yversion.html" data-eliom-c-onclick="2FnsmjHo+/iI">Version information</a></small><a target="_blank" href="http://www.insa-toulouse.fr"><img title="INSA Toulouse" style="width:73px;height:28px;" alt="INSA logo" src="../../Images/logo-insa-light.jpg"/></a><a target="_blank" href="http://jigsaw.w3.org/css-validator/check/referer"><img title="Validate css stylesheet" style="width:28px;height:32px;" alt="CSS3 logo" src="../../Images/css3.png"/></a><a target="_blank" href="http://validator.w3.org/check/referer"><img title="Validate html5 content" style="width:32px;height:32px;" alt="HTML5 logo" src="../../Images/html5.png"/></a></footer></body></html>

64
Y/Ada-S2/tp-m1.html Normal file
View file

@ -0,0 +1,64 @@
<!DOCTYPE html>
<!-- Page generated by OCaml with Ocsigen.
See http://ocsigen.org/ and http://caml.inria.fr/ for information -->
<html class="ada2" lang="fr" id="h" xmlns="http://www.w3.org/1999/xhtml"><head><title>Partie 1 (2H environ) : Manipulation de caractères</title><meta content="text/html; charset=utf-8" http-equiv="content-type"/><link media="all" href="../ystyle.css" rel="stylesheet"/><script src="../Scripts/yfold.js"></script></head><body><div class="header" id="header"><h1 id="title">Partie 1 (2H environ) : Manipulation de caractères</h1><nav><a class="caml_c" title="Back to main page" href="tps.html" data-eliom-c-onclick="gfTnxn62lNv8"></a></nav></div><main><section class="yfold"><h2 class="yfold-title" onclick="toggleYfold('1d669c0b')"><span class="arrow" id="arrow-1d669c0b">&#x25b8;</span>Objectifs</h2><div class="yfold-content" id="content-1d669c0b" data-yfold-default="show"><ul class="goals"><li>Parcourir les tableaux et matrices. </li><li>Exploiter l'information d'une structure imbriquée.</li></ul><h4>Prérequis</h4><ul class="requires"><li>À la première séance de TP, vous avez fait une bonne partie des exercices de préparation : <a class="caml_c" href="exo-traces.html" data-eliom-c-onclick="qAkNdhiy4PZ+">Exercice de tracés avec des caractères</a> et <a class="caml_c" href="exo-intervalles.html" data-eliom-c-onclick="7c2pXeamkvmC">Exercice avec des types article</a>. </li></ul></div><script>
//<![CDATA[
initYfold('1d669c0b') ;
//]]>
</script></section><section class="yfold"><h2 class="yfold-title" onclick="toggleYfold('e919c091')"><span class="arrow" id="arrow-e919c091">&#x25b8;</span>Mission 1</h2><div class="yfold-content" id="content-e919c091" data-yfold-default="hide"><p>La transformation d'une image en Ascii-Art (voir image ci-contre) nécessite de manipuler des caractères (des lettres), ceux qui servent à reconstituer l'image. Dans ce premier TP, nous nous concentrons donc sur la forme graphique des caractères, fournie sous forme de matrice. </p><section class="yfold card"><h4 class="yfold-title" onclick="toggleYfold('21bb4a14')"><span class="arrow" id="arrow-21bb4a14">&#x25b8;</span>Descente dans la table</h4><div class="yfold-content" id="content-21bb4a14" data-yfold-default="hide"><pre class="ascii">
```````
```'''````` ``````'''`,,`
```'` ``'``
,`' ''``
,'` `^,
`,' `'`
,,!~..`````````````````````,`'`,,``````````````````'''.'!,,
|'~ws\~` `/kx^^''~!, `,~x?J~~`
`-' `~*.-,-'``,` *XO**^*\k);` `,,--^./r!~' ^-`
_' ' `^',` `^,``` *5Q[jx/]%*/ `,,-'` ``,--` -`'`
_' ',,,` `''',._``,-'^-%%{*/~7Y)--_^^'```,,`''' ```_` ^`
`^ xcanr_~~,``'''^-''^-~~'``^^'^~,'^~``!_.~'~-,-''''''--:!x)=v` ^`
^ ''`'''^^''``-,---'',,.~~, ` `.x,,,,,^',``',,'--+^~~'^` ^
~` ' =0r^,--~'+-!x` -` `.
' ' ' ` '^ -` '
`^ ' -` `' -` ^`
'` ' '' ` _ ```' _` `,
'` ' x' ^ `~ ^` `,
`, ' `' ` !` -` `'
' ' `~` ``,'_ '' -` _`
' ' ````` `''~` ,`, ^` '
`. ' `` ' `'`^^, ' , -` ``
^` ' ' `,`` `' '` ' _` -` `'
^ ' ,' `,^ ~' `'' `' -` ^
^ ' `-```-`' .'` ,-,` '` -``-
-`' `-` `-` .` `-^' `' ',`'!` -'-
'' .' `' _``.`'`'.` ^` ^, ~^
`^` `^ `' ,` `', `^ ' ` `. `-^`
`' '` . ,` ' '. , ', ,` `'` -`
`' `` `'`' '` .'` , `,` -` `'` _`
`' ``^--`^ ' ^ ~ , '. '-,_.,'` -`
`' `^-~' `'`-`^ ! ^_`.,^` ^`
`' `` ,-`^`'`'''` ```'` ,`
`-'''''''''''''''''''---+*Y!+~=^''''--~-'''````````````````-`
</pre><ul class="steps"><li>Créez un dossier pour tous vos prochains TPs d'algo, nommez-le <span class="hfile">algo2</span> (sans espace !). Copiez-y le fichier <span class="file">mission1.adb</span> que vous trouvez sur commetud. </li><li>Écrire un programme <var>Mission1</var> qui demande poliment à l'utilisateur de taper un entier (n) et qui affiche ensuite la valeur de n. Testez.</li><li><span class="difficulty"><img style="width:16px;height:16px;" alt="Star" src="../Images/etoile.png"/></span> Complétez votre programme : affichez ensuite le caractère contenu dans la n-ème case de la table, avec <code class="inline">GAda.Text_IO.Put(Aff : character)</code>. <section class="advice"><div class="content"><ul><li>Pour tester : le caractère numéro 32 est un 'C'.</li><li>Il vous faut bien comprendre l'acteur <a class="file caml_c" href="acteur-jpg/caracteres.ads.html" data-eliom-c-onclick="K1+GdZu2su0o">Caracteres</a>. Pour cela, réfléchissez à deux, et lisez ces commentaires : </li><li>L'information que l'on cherche se trouve dans la variable <var>Table</var>. C'est un <b>tableau</b> (<code class="inline">array</code>). Voyez votre poly pour comprendre ce qu'est un tableau.</li><li>Chaque case de ce tableau contient un type article <code class="inline">T_Paire</code> (chaque case est différente). </li><li>On vous demande d'afficher le caractère contenu dans cet article.</li><li>En résumé, il faut donc trouver comment accéder à la N-ème case de la <var>Table</var>, et obtenir le caractère contenu dans le type article présent dans cette case.</li></ul></div></section></li></ul></div><script>
//<![CDATA[
initYfold('21bb4a14') ;
//]]>
</script></section><section class="yfold card"><h4 class="yfold-title" onclick="toggleYfold('adfb12d4')"><span class="arrow" id="arrow-adfb12d4">&#x25b8;</span>Parcours de matrice</h4><div class="yfold-content" id="content-adfb12d4" data-yfold-default="hide"><ul class="steps"><li><span class="difficulty"><img style="width:16px;height:16px;" alt="Star" src="../Images/etoile.png"/></span>Ajoutez un sous-programme : la procédure <code class="block">Afficher_Trame</code><img class="space" title="Afficher_Trame" style="width:343px;height:50px;" alt="Procedure Afficher_Trame" src="../Gen/Afficher_Trame-1-b52-.png"/>Pour afficher la trame, on parcourt la matrice ligne par ligne et colonne par colonne. Si la case contient un pixel allumé, on affiche un <var>#</var><small class="pcom"> (avec GAda.Text_IO.Put), </small>si le pixel est éteint, un espace. <br/><section class="advice"><div class="content">Pour détecter si le pixel est éteint ou allumé, utiliser un <b>bloc CASE</b>. </div></section></li><li>Pensez à ajouter une procédure de test : <code class="block">Tester_Afficher_Trame</code> qui affiche la trame de 3 ou 4 caractères de votre choix. <img class="space" title="Tester_Afficher_Trame" style="width:235px;height:50px;" alt="Procedure Tester_Afficher_Trame" src="../Gen/Tester_Afficher_Trame-0-c97-.png"/></li><li>Écrivez une procédure <code class="block">Afficher_Mot</code> qui reçoit en argument une chaîne (<var class="type">String</var>) et qui affiche verticalement les trames des caractères de cette chaîne. Si vous avez besoin de créer une fonction auxiliaire, c'est normal.<img class="space" title="Afficher_Mot" style="width:290px;height:50px;" alt="Procedure Afficher_Mot" src="../Gen/Afficher_Mot-1-78e-.png"/><section class="advice"><div class="content">Le type <var class="type">String</var> est un tableau de <var class="type">Character</var> : <br/><code class="block"><span class="kw">type</span> <span class="type">String</span> <span class="kw">is</span> <span class="kw">array</span>(<span class="ident">Integer</span> <span class="kw">range</span> &lt;&gt;) <span class="kw">of</span> <span class="ident">Character</span>
</code><br/>Le numéro de la première case n'est pas forcément <code class="inline">1</code>, il s'obtient avec la notation <code class="inline">'First</code>. </div></section></li><li>Testez en affichant votre nom.</li><li><span class="lbutton">Défi (facultatif)</span>(Si vous êtes en avance) afficher maintenant votre nom horizontalement. N'oubliez pas d'écrire d'abord l'algorigramme sur papier.</li></ul></div><script>
//<![CDATA[
initYfold('adfb12d4') ;
//]]>
</script></section></div><script>
//<![CDATA[
initYfold('e919c091') ;
//]]>
</script></section><section class="yfold"><h2 class="yfold-title" onclick="toggleYfold('edf0389a')"><span class="arrow" id="arrow-edf0389a">&#x25b8;</span>Acteurs utilisés</h2><div class="yfold-content" id="content-edf0389a" data-yfold-default="hide"><ul class="file-list"><li><a class="file caml_c" href="../Ada-S1/acteur-gada/gada-text_io.ads.html" data-eliom-c-onclick="u4xARMFAStEG">GAda.Text_IO</a></li><li><a class="file caml_c" href="../Ada-S1/acteur-gada/gada-integer_text_io.ads.html" data-eliom-c-onclick="HpGnIS+9/+EO">GAda.Integer_Text_IO</a></li><li><a class="file caml_c" href="acteur-jpg/caracteres.ads.html" data-eliom-c-onclick="j38sV1e1Pf2i">Caracteres</a></li></ul></div><script>
//<![CDATA[
initYfold('edf0389a') ;
//]]>
</script></section><section class="yfold"><h2 class="yfold-title" onclick="toggleYfold('644a65bb')"><span class="arrow" id="arrow-644a65bb">&#x25b8;</span>Bilan</h2><div class="yfold-content" id="content-644a65bb" data-yfold-default="hide"><ul class="success"><li>Une matrice dans un type article dans un tableau ne vous fait pas peur.</li><li>..mais saurez-vous manipuler un type article dans une matrice ? (cf <a class="caml_c" href="tp-m2.html" data-eliom-c-onclick="cM3G/zHGY24B">Mission 2</a>)</li></ul></div><script>
//<![CDATA[
initYfold('644a65bb') ;
//]]>
</script></section></main><footer><small class="pcom"><a class="caml_c" href="../yversion.html" data-eliom-c-onclick="020TtW4+L8N/">Version information</a></small><a target="_blank" href="http://www.insa-toulouse.fr"><img title="INSA Toulouse" style="width:73px;height:28px;" alt="INSA logo" src="../Images/logo-insa-light.jpg"/></a><a target="_blank" href="http://jigsaw.w3.org/css-validator/check/referer"><img title="Validate css stylesheet" style="width:28px;height:32px;" alt="CSS3 logo" src="../Images/css3.png"/></a><a target="_blank" href="http://validator.w3.org/check/referer"><img title="Validate html5 content" style="width:32px;height:32px;" alt="HTML5 logo" src="../Images/html5.png"/></a></footer></body></html>

63
Y/Ada-S2/tp-m2.html Normal file
View file

@ -0,0 +1,63 @@
<!DOCTYPE html>
<!-- Page generated by OCaml with Ocsigen.
See http://ocsigen.org/ and http://caml.inria.fr/ for information -->
<html class="ada2" lang="fr" id="h" xmlns="http://www.w3.org/1999/xhtml"><head><title>Partie 2 (3H environ) : Manipulation d'image</title><meta content="text/html; charset=utf-8" http-equiv="content-type"/><link media="all" href="../ystyle.css" rel="stylesheet"/><script src="../Scripts/yfold.js"></script></head><body><div class="header" id="header"><h1 id="title">Partie 2 (3H environ) : Manipulation d'image</h1><nav><a class="caml_c" title="Back to main page" href="tps.html" data-eliom-c-onclick="XZ0PS9odE233"></a></nav></div><main><section class="yfold"><h2 class="yfold-title" onclick="toggleYfold('12e7899e')"><span class="arrow" id="arrow-12e7899e">&#x25b8;</span>Objectifs</h2><div class="yfold-content" id="content-12e7899e" data-yfold-default="show"><ul class="goals"><li>Afficher et transformer une image (parcours d'image et utilisation de l'acteur graphique.)</li></ul><h4>Prérequis</h4><ul class="requires"><li>Vous avez terminé <a class="caml_c" href="tp-m1.html" data-eliom-c-onclick="Fji4IwKNfYi2">la première partie sur les caractères</a></li><li>Vous savez qu'une image est composée de points colorés appelés <i>pixels</i>. </li></ul></div><script>
//<![CDATA[
initYfold('12e7899e') ;
//]]>
</script></section><section class="yfold"><h2 class="yfold-title" onclick="toggleYfold('56c6586d')"><span class="arrow" id="arrow-56c6586d">&#x25b8;</span>Mission 2</h2><div class="yfold-content" id="content-56c6586d" data-yfold-default="hide"><p>Nous nous intéressons maintenant à la manipulation d'images.</p><section class="yfold card"><h4 class="yfold-title" onclick="toggleYfold('903b1d78')"><span class="arrow" id="arrow-903b1d78">&#x25b8;</span>Etape 1</h4><div class="yfold-content" id="content-903b1d78" data-yfold-default="hide"><pre class="inv-ascii">((*&lt;&lt;)*&gt;:)&lt;&lt;&lt;/~~^/:\::;^:/\\\:~v;*/vv;\)*()v/\/(\((v(:^:v(+)/+:~:/(+(;;v~:::(//:)++:)/::r(\)/
&lt;(&lt;&lt;&gt;)&lt;&lt;:/:lr)+!~;(:/\\;:v\://i&lt;/&lt;/(*;\v))&lt;*+/:)()vv&lt;/~:(*+):~)~\;v/v\iv~:::(;/:*;\:(\(:/)/(/
&lt;&lt;&lt;&lt;&lt;&lt;&lt;~=&lt;nCsp]=~+\CpSyZt^://;/\i)/&lt;*~//(&gt;&lt;(;&lt;&lt;&gt;&lt;/(&gt;&lt;:~/vv~)/~(;/;(/*:;&lt;~:::(//:);/:(/(:i*/)\
&lt;)&lt;&lt;&lt;vr/V3VP&amp;&amp;3&gt;~&lt;&gt;;~\:r+(\;r;:=:::**~\:*&lt;&lt;:(&lt;&lt;&lt;&lt;;(&lt;&lt;)~~*v~((~:;;+:;*:;*^::;/;/+*+r:)/):/)/v/
&lt;)&gt;*~x&amp;&amp;t*h?rT+/~.~~'^=~;v:;r/;~&gt;;*;)~;)&lt;&lt;&gt;:v&lt;&lt;&gt;&lt;):&lt;&lt;(~~&lt;*~(*~(\;\;\*~'^-\(` _:'''^+*::*\)/
&lt;&lt;&lt;^x3&amp;&amp;&amp;Gst*+^' `&lt;! -\:\)+|&lt;+*/&gt;i;)&gt;&lt;&lt;(&gt;&lt;&lt;&lt;&lt;&lt;/&lt;&lt;+^^/;^;(^(\;/;i:.,` ` ```_.+(::(/*:
&lt;*&lt;^2VVVsJri'. -.=!.`` -vr*+;&lt;/&lt;/&gt;i;(&lt;x&lt;v&lt;&gt;&gt;&lt;x&lt;+*~.',-^,(/!(:\::/v\:&lt;^~^---.;://&lt;)/&lt;::&lt;:*v
&lt;v&lt;*:vvv;:~' ,` _.&lt;/~~++(v&lt;;;&gt;r&lt;/&lt;;;v&lt;&gt;x:&lt;&lt;x&gt;&lt;*;*^-.',~v(+~*/;/:\&gt;/r^' ',` `=:&lt;(/&gt;v:&lt;(v:
&gt;*&lt;&lt;x&lt;&lt;&lt;*)(+ .=+-\+:~~(~&lt;v&lt;;i&gt;L&lt;r&lt;)v&gt;x&lt;f&gt;:&lt;&lt;&gt;&lt;~:(\^=;^^((~~v/;/(+&lt;\:\':):' '/:&gt;::v/:((*)
&lt;vx&lt;&lt;&lt;&lt;&lt;(((|l' f}/sL^\^~*;*:&gt;~ixewvxe4Gexzsrv)&gt;(~*&lt;v*/v:!~*/~*+:/*/&gt;/r&lt;~()\ -/:&lt;(:*v:((v:
&lt;)&lt;&lt;&lt;&lt;&lt;&lt;(*)(i~ `|ivw~&gt;:~;*/(:&gt;L::(&lt;Ls&amp;K0aa0Gkx):/~)****v(/^&lt;:~(~(/*\v:r&lt;i((:. +;;/::v/(::(/
&lt;/&gt;&lt;&lt;&lt;&lt;(:(**()`_FoVr~(\^;*\:;a&amp;2Y(xr&lt;sF}s2333s*&gt;&lt;~:((v(/&lt;:^&lt;*~)+(~*=v:;*~():;` .` `,~(/:::(\
&gt;/&lt;&lt;&lt;:(:~~~::/,/~sT;~;^'~(/:+fFF?1xLCy&amp;&amp;&amp;000P&lt;JZC:)**v(:&lt;:^&lt;*~(|v+:;::~-`,^~^- ` `--`-\/:/:\:
&lt;v&lt;/^/0^!..,'~++,~+()(^.;;;;ixo0&amp;g&amp;m&amp;gX&amp;&amp;04k&lt;(::\+(&lt;&lt;&lt;(:((^((~v~&lt;r(+/;```.!_' . -. -\(//:/
&lt;(~.~\V^^^.,,```_~i::/~^;(\;iV0XX555555g&amp;3Gkx&gt;;~;;&lt;&lt;&lt;&gt;&lt;v((~)v=&gt;+&lt;\T~:!''.;\`` ~i| =\(/):/
&lt;(,^=+/((~ ^' `~=~/++^-^^^^^/T~T5XXX&amp;&amp;&amp;3S000Sr/;\&lt;&lt;&gt;&gt;&gt;v;:~;T~:~:~\!^' '^~~ `:/- ^/:/v::
&lt;;:(&gt;(v)~ ` :x^;;.`,`'`.._/*fVh(*V&amp;300HX&amp;&amp;[+;;oo*&lt;v://^i\~/^/^` ` ,`_+!' ^!=`` `'~(::
(:&lt;(*:v)` '` +x~irv'^!.=^!^^'~;^zw4O&amp;&amp;&amp;0&amp;4&amp;*i*4&amp;p&lt;*()\/~;:~:^\~+..=~~--/v -/!;'~!_.,/;/
)((()(())+T~x):;=xl/(+=+.^~~~;^xw&amp;ggggXXXO300P1zxf&gt;&gt;**((\)/~(~\!/^~+|/~!` '' `` '-` `\;)\:+:
(:(//::)(~,-,```/&gt;|'|:r=/C(I(~v&amp;X5XgX&amp;XXb&amp;P}C4&amp;&amp;3af&lt;**&lt;)r*(~(^\|/^~~|/+- `!::;` '~\;\/(~:
)*(::::::,```/',^+\i+'&lt;++&lt;&gt;\!(*4P4Y30230S0mkqXX&amp;0Z&gt;&lt;*&gt;*)~*(~*~/!;^+!+:' .::\/(/` -i\/:/(;:
&lt;&lt;(:/://:^```,',,`-\)\!.!~i~~(/C&lt;&gt;&gt;hy000S0k&lt;xVaPF\:**&lt;*(~((~(|/!:~+|iv.` ,((:/:)(| +/:(/:/:
xzjjv&lt;v(/!' `!,-|-i&gt;xv~:(\:&lt;o*&gt;^{{x~&lt;CFFxsxxv~~~~;/&lt;&lt;*:~(:~v!(~:~;|+v+` ;:::/:::/ .;:::://:
XX&amp;&amp;XX&amp;X&amp;k'` `qpx.^,&lt;suswkC}uz:x;j)&lt;~&lt;x^shkx&gt;:^~~^;\&lt;&lt;(v~)(~v!/!(~/+~)- ^/://;(:/` ^;(//;/\\
XXXXXXXXXk`' +&amp;&amp;r,''+VXX55gggg5g5gggg555XX&amp;&amp;2aapwpppwwwuwsusLxIxL&gt;:;&gt;` -;;+/;\:_ +;\~~^+;
XXXXXXXXX&amp;o+```sXk,~`'`^0g55555g555555gg55gg55555555555555g550k?r~~^!|iLna&amp;0Ps*r^-_.=ouoL::~~
X5XXXX5XXXk_``=&amp;X5S&amp;s```)X55555gg5555555g555555555gg2k7T\~'^!|icop&amp;&amp;X0V?T~'_=:xs2g55g5gg55gg5
XX555XgXXF&gt;vi.&amp;XXgX&amp;Y'``aXgg5X5555555555550VF*\~',-_!icop05ggg0h*r~'_.;ns4ggggg5g55555g555555
XXXXXXXXS?&amp;X[^aXXXXf\=.~&amp;555XXX550sF*r^,,_.|ivnsa&amp;g5g53VF*\~'.=Lnsmggg55g5g55555g55gg5g555555
XXXXXXXX/T(T~0XXXXPs&amp;(f^w7T;^',_'_|=Lco0g5g55g5&amp;UF*\^''=ixs0g5gg555555g555g55g55g5555g55g5g55
XXXXXXXe~~``*r~/h?~*Y+! `!iLxopSX55555&amp;aF*~'-'.=Lxsa&amp;5555g555g5555555g5ggg55gg55555555555555
XXXX&amp;&amp;p\T-`.````_.,i,`oP3XXX5gXgGk*~',``_|ivzp&amp;g55555g55555555g5555555g555555555555555g5g5555
XXX4:~o=-_ivnw0XXr+-``'~?*T~,,,``_!ivo3gg5gg555555g55ggg5gg555555g55555g5gg5555g5555555555555
XXX&amp;ppXXXXXX&amp;FfkF-~,r-````_|:xsS55gg5g555g555555555555555555g555555g5g5g5555555g555555555g555
XXXgXXXggXXXk1*0&amp;si~\vopXg55g555g5555g55555g55555g5g555g555555555555g555g55g55555555g555g5555
</pre><ul class="steps"><li>Dans votre dossier algo2, copiez une image <b>JPG</b> de bon goût, de taille maximale 800x600 <b>qui n'ait aucun axe de symétrie. </b>À défaut, prenez cette <a class="caml_c" href="../Images/mononoke.jpg" data-eliom-c-onclick="UBZyB+4Y8Xzo">affiche de film</a> <i>(clic-droit sur le lien : enregistrer la cible du lien...)</i></li><li><span class="difficulty"><img style="width:16px;height:16px;" alt="Star" src="../Images/etoile.png"/></span>Écrivez un nouveau programme <var>Mission2</var>, ajoutez une procédure <code class="block">Afficher_Image</code> qui prend en argument une image (de type <var class="type">T_Image</var>) et qui l'affiche. <br/>Le type <var class="type">T_Image</var> est défini dans l'<a class="file caml_c" href="acteur-jpg/jpg.ads.html" data-eliom-c-onclick="p7gl6zeocsO+">acteur JPG</a>. et l'affichage se fait grâce à l'acteur <a class="file caml_c" href="../Ada-S1/acteur-gada/gada-graphics.ads.html" data-eliom-c-onclick="o/UQ31xXFYqL">GAda.Graphics</a>. <img class="space" title="Afficher_Image" style="width:323px;height:50px;" alt="Procedure Afficher_Image" src="../Gen/Afficher_Image-1-597-.png"/></li><li>Écrivez une procédure de test <code class="block">Tester_Afficher_Image</code> qui demande à l'utilisateur de choisir un fichier jpg et qui l'affiche. <ul><li>Voyez l'acteur <a class="file caml_c" href="../Ada-S1/acteur-gada/gada-plus.ads.html" data-eliom-c-onclick="4tRBhSTRsrTF">GAda.Plus</a> pour choisir un fichier. </li><li>Rappelez-vous qu'on ne définit pas de variable de type String, seulement des constantes, avant le <code class="kw">begin</code>. </li></ul><img class="space" title="Tester_Afficher_Image" style="width:235px;height:50px;" alt="Procedure Tester_Afficher_Image" src="../Gen/Tester_Afficher_Image-0-c97-.png"/><section class="advice"><div class="content">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 <code class="block">ZImage : T_Image := <i>(quelque chose de type T_Image)</i> ;</code></div></section></li></ul></div><script>
//<![CDATA[
initYfold('903b1d78') ;
//]]>
</script></section><section class="yfold card"><h4 class="yfold-title" onclick="toggleYfold('f7c7425a')"><span class="arrow" id="arrow-f7c7425a">&#x25b8;</span>Etape 2</h4><div class="yfold-content" id="content-f7c7425a" data-yfold-default="hide"><ul class="steps"><li>Modifiez la procédure <code class="inline">Afficher_Image</code> pour qu'elle prenne deux arguments supplémentaires : les coordonnées où l'on veut afficher l'image. <img class="space" title="Afficher_Image" style="width:323px;height:50px;" alt="Procedure Afficher_Image" src="../Gen/Afficher_Image-3-451-.png"/>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). Vous devez obtenir ceci : <img class="space" style="width:160px;height:200px;" alt="Exemple avec l'image originale translatée." src="../Images/image-decalee.png"/></li><li><span class="difficulty"><img style="width:16px;height:16px;" alt="Star" src="../Images/etoile.png"/></span>En créant quatre variantes de votre procédure d'affichage, afficher l'image avec différents filtres : <ul><li>Une fois en normal (Afficher_Image)</li><li>En <b>permutant les composantes</b> rouge, verte, bleue (par exemple, la composante verte prend la valeur du rouge, et la composante rouge prend la valeur du bleu, etc.).</li><li>En <b>négatif</b> (chaque composante de couleur <var>z</var> devient <var>255-z</var>)</li><li>En <b>noir et blanc</b> (tons de gris, obtenus en prenant chaque composante égale à la luminosité). <br/>La luminosité d'un pixel se calcule en faisant la moyenne des trois couleurs<small class="pcom"> (en réalité, la moyenne devrait être pondérée en fonction de la sensibilité de l'oeil humain aux différentes couleurs)</small>. <img class="space" style="width:160px;height:200px;" alt="Exemple avec quatre images dans un rectangle." src="../Images/image-4.png"/></li></ul></li><li><span class="lbutton">Facultatif</span><small class="pcom">(À laisser si vous êtes en retard) : </small><ul><li><span class="difficulty"><img style="width:16px;height:16px;" alt="Star" src="../Images/etoile.png"/><img style="width:16px;height:16px;" alt="Star" src="../Images/etoile.png"/></span><b>&quot;Floutage&quot; </b> (rendre l'image floue) : on rend l'image floue en remplaçant chaque pixel <var>(x,y)</var>par une moyenne des pixels situés dans un carré de taille n centré en <var>(x,y)</var>. <br/>Testez avec n = 5, 10, 20.</li><li><span class="difficulty"><img style="width:16px;height:16px;" alt="Star" src="../Images/etoile.png"/><img style="width:16px;height:16px;" alt="Star" src="../Images/etoile.png"/></span><b>Détection de contours </b> : 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.</li></ul></li></ul></div><script>
//<![CDATA[
initYfold('f7c7425a') ;
//]]>
</script></section></div><script>
//<![CDATA[
initYfold('56c6586d') ;
//]]>
</script></section><section class="yfold"><h2 class="yfold-title" onclick="toggleYfold('a94505db')"><span class="arrow" id="arrow-a94505db">&#x25b8;</span>Acteurs utilisés</h2><div class="yfold-content" id="content-a94505db" data-yfold-default="hide"><ul class="file-list"><li><a class="file caml_c" href="../Ada-S1/acteur-gada/gada-graphics.ads.html" data-eliom-c-onclick="1/LiiCFvIJDC">GAda.Graphics</a></li><li><a class="file caml_c" href="../Ada-S1/acteur-gada/gada-plus.ads.html" data-eliom-c-onclick="5Pw1SA0GnL4p">GAda.Plus</a></li><li><a class="file caml_c" href="acteur-jpg/jpg.ads.html" data-eliom-c-onclick="Xjd8iD5+DhdN">JPG</a></li></ul></div><script>
//<![CDATA[
initYfold('a94505db') ;
//]]>
</script></section><section class="yfold"><h2 class="yfold-title" onclick="toggleYfold('3cc3bf0d')"><span class="arrow" id="arrow-3cc3bf0d">&#x25b8;</span>Bilan</h2><div class="yfold-content" id="content-3cc3bf0d" data-yfold-default="hide"><ul class="success"><li>Vous connaissez la structure classique d'une image numérique : une matrice de point colorés (définis par trois composantes R,G,B).</li><li>Vous promettez d'être désormais rigoureux concernant les indices de lignes et de colonnes.</li></ul></div><script>
//<![CDATA[
initYfold('3cc3bf0d') ;
//]]>
</script></section></main><footer><small class="pcom"><a class="caml_c" href="../yversion.html" data-eliom-c-onclick="CHQs4AFxwlfS">Version information</a></small><a target="_blank" href="http://www.insa-toulouse.fr"><img title="INSA Toulouse" style="width:73px;height:28px;" alt="INSA logo" src="../Images/logo-insa-light.jpg"/></a><a target="_blank" href="http://jigsaw.w3.org/css-validator/check/referer"><img title="Validate css stylesheet" style="width:28px;height:32px;" alt="CSS3 logo" src="../Images/css3.png"/></a><a target="_blank" href="http://validator.w3.org/check/referer"><img title="Validate html5 content" style="width:32px;height:32px;" alt="HTML5 logo" src="../Images/html5.png"/></a></footer></body></html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
Y/Images/image-4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
Y/Images/image-decalee.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB