Allegro TD-TP 2
Algorithmique / Programmation structurée. TD-TP Allegro 2 - Couleurs, datas
images, animation. OBJECTIFS A ATTEINDRE : A l'issue du TDTP 2 vous devez
...
Part of the document
TD-TP Allegro 2 - Couleurs, datas images, animation OBJECTIFS A ATTEINDRE :
A l'issue du TDTP 2 vous devez être capable : - de sélectionner une profondeur de couleur (15,16,24 ou 32 bits) avec la
fonction set_color_depth() appelée avant l'initialisation du mode graphique
(la fonction set_gfx_mode() ) - en 8 bits (le mode par défaut) de créer une palette de couleur (algo
perso) et de la rendre opérationnelle dans le programme (un appel de la
fonction set_palette()), ensuite d'utiliser ses couleurs (fonctions de
dessin, effets) - De créer une BITMAP en mémoire avec la fonction create_bitmap(). - de dessiner dedans avec les primitives de dessin et d'afficher le
résultat à l'écran (screen) avec la fonction blit(). - de récupérer une image bitmap dans le programme avec la fonction
load_bitmap(), de l'afficher, de la modifier pixel par pixel et de la
réafficher. Les exercices proposés sont donnés pour vous aider à atteindre ces
objectifs, toutefois vous pouvez adapter ces exercices, vous en donner de
nouveaux et entrer dans des expérimentations personnelles avec l'accord de
votre chargé de TDTP. L'important est d'atteindre les objectifs. Evitez de
bloquer en vain sur un exercice, trouvez le moyen d'avancer. Exercice 1 : Modifier les couleurs d'une image Faire un programme qui :
1) récupère une image bitmap (mode couleur au choix et fonction
load_bitmap( ) dans le cours)
2) donne la possibilité de modifier séparément la teneur en rouge ou en
bleu ou en vert de l'image
3) donne l'image initiale en négatif
Exercice 2 : Morphing entre deux images true color (16, 24 ou 32 bits) Soit deux images de la même taille et dans le même mode (16 ou 24 ou 32
bits) :
- imaginer un système de morphing qui permette de passer graduellement
d'une image à l'autre
- essayer de faire une animation qui rende visible chaque étape de la
transformation
Exercice 3 : couleurs 8 bits, créer une palette Une palette est un tableau de 256 struct RGB {int r,g,b ;} ; et chaque
champs correspond à une intensité de couleur avec une valeur entre 0 et 63
compris. Créer une palette c'est donc réaliser un ensemble de 256 mélanges
de rouge, vert et bleu.
Imaginer un algorithme de création de palette, le réaliser et afficher la
palette sous forme d'un ensemble de 16 sur 16 carreaux, chaque carreau
correspondant à une couleur de la palette.
Exercice 4 : Algorithmie à propos du mode palette Dans un programme, soit une image 8 bits en mode palette, faire les
fonctions qui : 1) donne le nombre de couleurs réellement utilisées dans l'image
2) regroupe toutes les couleurs utilisées en début de palette
3) modifie à nouveau la palette afin d'ordonner les couleurs utilisées
en ordre croissant (du plus sombre au plus clair). En effet les couleurs
utilisées par l'image ne sont pas classées. Du coup couleurs sombres et
claires s'intercalent de façon aléatoire. Attention à la question 2 : Il faut modifier l'image en fonction de la modification faite à la palette.
En effet si la couleur 144 passe à l'indice 1 tous les pixels de la couleur
144 doivent prendre la valeur 1. Dans un premier temps il faut créer une
nouvelle palette modifiée mais il faut également conserver chaque
modification apportée, par exemple 144 qui devient 1, 200 qui devient 2
etc. Une bonne méthode peut être de se faire une table de transformation,
par exemple un tableau de 256 entiers ou chaque entier indique le nouvel
indice de couleur : int tab[256] ; Au départ le tableau est initialisé à -1, chaque indice correspond à une
couleur de la palette actuelle mais à chacune de ces positions va être
stockée la nouvelle position dans la palette modifiée. Par exemple si la
couleur 144 passe en 1 on aura : tab[144]=1 ; Une fois cette table constituée il suffit de l'appliquer à l'image : pix=getpixel(monImage,x,y) ; // récupérer l'ancien indice de
couleur d'un pixel
putpixel (monImage,x,y,tab[pix]) ; // remplacer par le nouvel indice
dans la nouvelle palette
Exercice 5 : Contours d'une zone colorée de l'image Dans un programme, allouer une bitmap mémoire (fonction create_bitmap()) et
dessinez dedans avec des primitives de dessins. Le but de l'exercice est
ensuite d'essayer de faire une fonctions qui permette de détourer des zones
de couleurs ou des formes. La zone peut être sélectionnée avec la souris et
une fois détourée elle pourra soit être entourée par un trait d'une autre
couleur, soit changer de couleur avec la fonction floodfill() de la
librairie.
Exercice 6 : Animation Deux images sont en mouvement à l'écran.
Le mouvement de l'une est automatique ; elle bouge selon une trajectoire
que vous déciderez, et se trouve soit dans un écran circulaire où elle
passe d'un bord à l'autre, soit au contraire dans un espace fermé où elle
rebondit sur les bords.
L'autre est un player dirigé par avec les touches flèches du clavier. Pour obtenir une bonne fluidité de l'animation l'effacement des images à
leur position courante peut se faire avec une BITMAP couleur du fond, de la
même taille que l'image à effacer. Cette image couleur de fond est affichée
avec la fonction blit() par-dessus l'image à effacer à la même position au
moment de l'effacement. Comment vous y prendriez-vous pour que le player puisse envoier des
projectiles ? Essayez. Exercice 7 : Casse-pipes Des trucs embêtants, qui apparaissent un par un, circulent dans l'écran et
vous ne pouvez plus travailler. Heureusement le curseur de la souris se
transforme en viseur et vous pouvez vous en débarrasser en positionnant le
viseur sur la cible et en cliquant. Faire le programme, étape par étape. Pour ce programme utilisez une BITMAP *fond de la même taille que
l'écran. Les envahisseurs se déplacent dans cette bitmap fond que vous
pouvez effacer facilement avec l'appel : clear_bitmap(fond) ; et afficher à l'écran avec l'appel : blit(fond,screen,0,0,0,0,SCREEN_W,SCREEN_H) ; Une fois que les envahisseurs se déplacent la souris tir dessus : à
l'endroit du clic un cercle est tracé directement à l'écran d'une couleur
unie par exemple : #define COULEURTIR makecol(255,255,255) Cette couleur permet de savoir si un envahisseur est touché. En effet
chaque envahisseur est identifié par une position (x,y), par exemple son
centre. Au moment où il avance dans la bitmap fond il suffit de regarder
à l'écran si le pixel de position de l'envahisseur coïncide à l'écran avec
la couleur COULEURTIR, si oui c'est que l'envahisseur est touché et ... ça
dépend, il explose, se met en colère, s'en va, disparaît, se
métamorphose...
-----------------------
[pic]