Avant de commencer…
Consultez les corrections du TD1.Qu’est-ce qu’on apprend
- Comment utiliser des pointeurs pour passer des structures des données à une fonction.
- Comment décomposer un problème en plusieurs parties en utilisant des fonctions.
- Comment utiliser des fonctions qui sont définies dans d’autres fichiers.
Lecture…
Pointeurs:
- Chapitre 6 du poly ou le notebook IN102-04 (vidéo recommandée)
Fonctions:
C’est l’heure du quizz…
Remplissez le quizz IN102-02 ** avant le mardi 1er octobre 18h.**
Au boulot…
Le but est de tracer des lignes en utilisant les fichiers paint.h, paint.c, paint_demo.c. Merci de télécharger ces fichiers ici et de les placer dans votre répertoire de travail (là où vous editez votre programme et executez gcc).
IMPORTANT: Donnez votre prénom et nom au début du fichier de réponse, sous forme de commentaire. Ajoutez également les réponses aux questions dans votre programme, sous forme de commentaires. Exemple:
/* Jeanne LAGAFFE */
#include <stdio.h>
int main () {
printf("Hello World !!\n");
}
/*
Q1: Ceci est la réponse à la question 1.
Q2: Voilà la réponse à la question 2.
*/
Q1:
Regardez le fichier paint_demo.c
. Combien de pixels sont coloriés en rouge par le programme?
Q2:
Quelles sont les valeurs de i_min,j_min,i_max,j_max si on dit que les pixels rouges forment une ligne du pixel (i_min,j_min) au pixel (i_max,j_max)?
Q3:
Compilez et exécutez le programme.
Attention: Pour compiler, il faut ajouter “paint.c” pour que le compilateur trouve le code dans ce fichier:
gcc -Wall -Werror -Wfatal-errors paint_demo.c paint.c
Regardez le fichier paint_demo.bmp
qu’il a créé. On y voit quoi? (OK, la réponse est simple mais jouez le jeux.)
Q4:
En vous inspirant de paint_demo.bmp
, écrivez un programme qui crée une image ligne.bmp
de taille 600x400 et qui trace une ligne horizontale du pixel (100,50) au pixel (500,50).
Q5:
Ajoutez à votre programme une fonction pour tracer une ligne horizontale :
void ligne_horizontale(int j,int i_min,int i_max,
int r, int g, int b,
int largeur,int hauteur, unsigned char* pixels) {
// a compléter
}
Modifiez votre main()
afin de tracer la ligne en appelant cette fonction (plus aucun appel à color_pixel
dans votre main
).
Q6:
Ecrivez un programme qui utilise votre fonction ligne_horizontale
pour dessiner un rectangle rempli, rouge, entre les coordonnées (50,100) aux coordonnées (500,250), dans un fichier rectangle.bmp
. En dehors de la fonction ligne_horizontale
, le programme n’a pas pas droit à color_pixel
.
Q7:
Ajoutez à votre programme une fonction
void rectangle(int x_min, int y_min, int x_max, int y_max,
int r, int g, int b,
int largeur,int hauteur, unsigned char* pixels)
qui sera appelé depuis le main()
pour dessiner le rectangle. Modifiez le programme pour n’avoir plus d’appel à ligne_horizontale(...)
, ni à color_pixel(...)
dans votre main()
.
Remarque: Votre ordinateur dessine tous éléments graphiques sur votre écran en utilisant des fonctions comme ceux que vous venez de créer : un pixel à la fois, en traçant des lignes. Il colorie ainsi environ 100 million de pixel par seconde.
Validez:
Nommez le fichier T02a.c
et envoyez-le à votre chargé de TD