DM 3 : Les couleurs

Transcription

DM 3 : Les couleurs
Devoir à la maison ISN pour le 28 Novembre 2012.
Les couleurs
1
Principe
Actuellement les écrans d’ordinateurs savent afficher 16 millions de couleurs. D’après une étude
menée en 1998, l’œil humain ne pourrait distinguer "que" 2 millions de couleurs en moyenne.
Il existe différentes solutions pour décrire une couleur, celle qui va nous intéresser est le système
RGB (ou RVB en français) pour les 3 couleurs primaires Rouge, Vert, Bleu. En utilisant le principe
de synthèse additive des couleurs. On va pouvoir à partir de ces 3 couleurs recréer toutes les couleurs
dont nous avons besoin. En voici quelques exemples :
Rouge
100%
100%
0%
100%
100%
50%
0%
...
Vert
100%
0%
100%
50%
100%
50%
0%
...
Bleu
0%
100%
100%
0%
100%
50%
0%
...
Résultat
Jaune
Violet
Cyan
Orange
Blanc
Gris
Noir
...
Interface de modification de couleurs du logiciel libre GIMP (www.gimp.org)
Vous pouvez utiliser l’excellent logiciel libre
GIMP pour créer une couleur ou plus simplement utiliser un outil en ligne comme le
suivant :
http ://www.code-couleur.com/
Capture d’écran du site www.code-couleur.com
Quel que soit l’outil utilisé, vous constaterez que les proportions de rouge, vert et bleu ne sont
pas données en pourcentage, mais par un entier entre 0 et 255. On dit que cet entier est codé sur un
octet.
2
Binaire et octet
Expliquons le système de numération d’un ordinateur. Les êtres humains comptent en base décimale (base 10), sûrement car ils ont dix doigts. Un ordinateur ne peut stocker de l’information qu’à
l’aide de signaux électriques qui sont soit sur ON soit sur OFF. Il n’existe donc que 2 états pour une
machine : 0 ou 1 que l’on appelle bit.
Un ordinateur compte donc en base 2, on dit qu’il compte en binaire. Si on colle 2 bits ensemble,
on peut représenter 4 nombres : 00, 01, 10 et 11. Le principe de numération est identique à celui que
nous utilisons tous les jours :
• En base 10 : on commence par écrire les premières valeurs : 0, 1, ... 8, 9 quand on n’a plus
de chiffre disponible, on prend alors une dizaine et on recommence 10, 11, ... et ainsi de suite
jusqu’à 99 où il faut alors ajouter un nouveau chiffre (des centaines).
• En base 2, la position des chiffres est tout aussi déterminante : On commence à 0, puis 1, puis
10, 11, 100, 101, ... le nombre de chiffres augmente donc très rapidement.
Par exemple, le nombre 2 534 peut se décomposer ainsi avec notre système de numération décimale :
2 534 = 2000 + 500 + 30 + 4
= 2 × 1000 + 5 × 100 + 3 × 10 + 4 × 1
= 2 × 103 + 5 × 102 + 3 × 101 + 4 × 10
et avec le système de numération binaire :
2 534 = 1 × 211 + 1 × 28 + 1 × 27 + 1 × 26 + 1 × 25 + 1 × 22 + 1 × 21
donc, en binaire, le nombre 2 534 s’écrit 100111100110.
Conversion d’un binaire en décimal : Pour savoir ce que représente le nombre 10110 en base 10,
on peut présenter le calcul ainsi :
1
0
1
1
0
×24
×23
×22
×21
×20
1 × 16 + 0 × 8 + 1 × 4 + 1 × 2 + 0 × 1 = 22
Le nombre 10110 en binaire représente donc 22 dans notre système décimal.
Conversion d’un décimal en binaire : Pour la conversion inverse, il suffit d’effectuer des divisions
successives par 2 jusqu’à obtention d’un quotient nul. Le nombre en binaire s’obtient alors en listant
en sens inverse les restes obtenus. Si on reprend l’exemple précédent avec le nombre 22 :
Nombre
22
11
5
2
1
Quotient
11
5
2
1
0
Reste
0
1
1
0
1
Un octet est une unité de place en mémoire (mémoire interne, disque dur,...). Elle représente
l’emplacement nécessaire pour coder un nombre sur 8 bits. Si on ne s’intéresse qu’aux entiers positifs,
on peut donc coder sur un octet un nombre allant de 00000000 à 11111111 qui représente le fameux
255 en décimal.
Exercice 1
Complétez le tableau ci-dessous :
Binaire
10101010
...
11110000
...
Décimal
...
234
...
101
Exercice 2
Quelle est la particularité de l’écriture binaire de tous les nombres pairs ?
Exercice 3
Dans la même idée de regroupement par puissance de 2, un kibioctet (Kio) ne représente pas 1000
octets comme on pourrait imaginer, mais 1024(= 210 ) octets. De la même manière, 1Mio (mébioctet)
représente 1024 Kio et 1Gio (gibioctet) 1024 Mio. Combien d’octets peut-on mettre sur un espace
de 2Gio ?
Remarque : pour l’usage grand public, il y a souvent confusion chez les commerçants entre ces
unités (Kio, Mio, Gio) et celles que l’on trouve plus communément : selon la norme IEC 60027-2, un
kilooctet (ko) représente 1 000 octets, un mégaoctet (Mo) représente 1 000 ko et un gigaoctet (Go)
représente 1 000 Mo.
Exercice 4
Réalisez en PHP deux programmes (on pourra utiliser les fonctions de conversion de PHP)
1. Le premier demande un nombre en écriture décimale et le transforme en écriture binaire.
2. Le second demande un nombre en écriture binaire et le transforme en écriture décimale.
3
Hexadécimal
L’écriture binaire d’un nombre, bien que naturelle pour la machine, présente le gros inconvénient
de générer des nombres dont l’écriture est très longue et peu lisible pour l’être humain. Pour cela on
se propose pour un octet de regrouper les bits 4 par 4. Sur 4 bits, on peut écrire 16 valeurs de 0000
à 1111 en binaire ou plus clairement de 0 à 15 en décimal. Il nous faudrait donc 16 symboles pour
représenter ces valeurs et ainsi travailler en base 16 que l’on appelle base hexadécimale. On a déjà
les 10 chiffres de 0 à 9 que l’on va compléter par 6 lettres : A, B, C, D, E et F.
En hexadécimal, 2 symboles suffisent donc pour écrire un nombre de 0 à 255. Le principe est
toujours le même, on commence à numéroter : 0, 1, ..., 8, 9, A, B, C, D, E, F, puis 10, 11, 12, ... 1A,
..., 1F, 20... La conversion d’une base à l’autre se fait aussi selon les mêmes règles.
Conversion d’un nombre hexadécimal en décimal : comme pour le binaire, cette fois-ci on multiplie par des puissances de 16, un exemple avec le nombre 1A3C :
1
A
3
C
3
2
1
×16
×16
×16
×160
1 × 4096 + 10 × 256 + 3 × 16 + 12 × 1 = 6 716
Conversion d’un décimal en hexadécimal : la conversion se fait à l’aide de divisions successives
par 16. Si on reprend l’exemple précédent avec le nombre 6 716 :
Nombre Quotient Reste Symbole
6716
419
12
C
419
26
3
3
26
1
10
A
1
0
1
1
Le nombre 6 716 s’écrit donc en hexadécimal sous la forme 1A3C.
Exercice 5
Complétez le tableau ci-dessous :
Binaire
101010
...
...
Décimal
...
534
...
Hexadécimal
...
...
BAC
Exercice 6
Complétez les programmes de conversion précédents pour que l’on puisse entrer un nombre en
décimal, binaire ou hexadécimal et que la machine affiche ce nombre dans les autres bases.
4
Pour revenir aux codes couleurs HTML
Dans une page HTML, si l’on souhaite une couleur personnalisée, on peut alors préciser la couleur
que l’on souhaite en indiquant le code HTML de la couleur désirée. Le code HTML d’une couleur
est une chaîne de caractères composée de :
• Un symbole # pour commencer.
• 2 symboles correspondant au niveau de rouge codé en hexadécimal.
• 2 symboles correspondant au niveau de vert codé en hexadécimal.
• 2 symboles correspondant au niveau de bleu codé en hexadécimal.
Par exemple, la couleur #FFFFFF correspond au blanc, #FF0000 au rouge, ...
Exercice 7
Réalisez une fonction RVB2HTML qui :
• attend pour paramètres d’entrée 3 nombres entiers $r, $v et $b entre 0 et 255.
• Renvoie une chaîne de caractères correspondant à la couleur (r,v,b) entrée.
Attention le code HTML d’une couleur doit forcément compter 7 caractères (il faut ajouter des 0 le
cas échéant).
Exercice 8
Réalisez une page en PHP générant l’affichage d’une page HTML contenant le mot ISN en dégradé.
Exercice bonus 1
Même exercice, mais réalisant un dégradé d’une couleur aléatoire vers
une autre.
Exercice bonus 2
Reprogrammez vous même les fonctions bindec et decbin de PHP.

Documents pareils