⇤ ← Version 1 à la date du 2013-12-14 15:54:28
2709
Commentaire:
|
← Version 2 à la date du 2016-02-29 12:50:06 ⇥
2748
|
Texte supprimé. | Texte ajouté. |
Ligne 1: | Ligne 1: |
## page was renamed from 1B2/solution |
Cette page contient des exemples de solutions pour le TP 1B2.
Exercice 1: rotation de 180°
Si L est la largeur de l'image et H est sa hauteur, en nombre de pixels, alors l'image tournée de 180° a les mêmes dimensions mais le pixel de coordonnées (x,y) dans l'image de départ se rtetrouve en (L-x-1,H-y-1) dans l'image résultat. Attention à la soustraction de 1: les coordonnées vont de (0,0) à (L-1,H-1).
On peut donc écrire la solution suivante en utilisant les fonctions du module pnm fourni:
Mais bien sûr, cette fonction ne manipule presque pas la structure de données, elle utilise les fonctions fournies. En fait, elle procède selon le principe des types abstraits. Si on veut réécrire cette fonction en manipulant directement la structure de données, on pourre procéder de la façon suivante:
1 def retourner2(image):
2 L = image['largeur']
3 H = image['hauteur']
4 entree = image['donnees']
5
6 # création de la liste des valeurs
7 sortie = [0] * (L * H * 3)
8
9 # définition des valeurs des pixels
10 for x in range(L):
11 for y in range(H):
12 pos_entree = (y * L + x) * 3
13 pos_sortie = ((H-y-1) * L + (L-x-1)) * 3
14 for i in range(3):
15 sortie[pos_sortie + i] = entree[pos_entree + i]
16
17 # construction de la structure de l'image produite
18 return {
19 'largeur': L,
20 'hauteur': H,
21 'maximum': image['maximum'],
22 'donnees': sortie
23 }
Exercice 2: écriture au format PPM ASCII
Les données sont stockées dans la liste donnees dans le même ordre que ce que spécifie le format PPM, il suffit donc d'écrire l'en-tête suivie des données dans l'ordre où elles se trouvent. Il faut juste prendre soin d'écrire les valeurs en base 10 séparées par des caractères d'espacement, en l'occurence des retours à la ligne dans cette solution:
1 def ecrire_ascii(image, nom_fichier):
2 fichier = open(nom_fichier, "w")
3
4 # écriture de l'en-tête
5 fichier.write("P3 %d %d %d\n" %
6 (image['largeur'], image['hauteur'], image['maximum']))
7
8 # écriture de la liste des valeurs (écrites en base 10)
9 for x in image['donnees']:
10 fichier.write("%d\n" % x)