Pour ceux qui sont un peu perdu avec la section 3.1
#include<stdio.h>
#include "libgmini.c"
/* Créer la couleur à partir des composantes */
int color(unsigned char red, unsigned char green, unsigned char blue) {
return red * 65536 + green * 256 + blue;
}
/* Récupère la composante rouge */
unsigned char getRed(int color) {
return color/65536;
}
/* Récupère la composante vert */
unsigned char getGreen(int color) {
return (color%65536)/256;
}
/* Récupère la composante bleu */
unsigned char getBlue(int color) {
return color % 256;
}
/* Récupère la hauteur et la largeur de l'image */
void sizePPM(char *name, int * p_width, int * p_height) {
FILE * fp = NULL;
char line[256];
fp = fopen(name,"r"); /* Ouverture du fichier */
if (fp == NULL)
printf("File %s not found !\n",name);
fgets(line,256,fp); /* On saute la ligne P3 */
fgets(line,256,fp); /* On saute la ligne de commentaire */
fscanf(fp, "%d %d", p_width, p_height); /* On lit la hauteur et la largeur*/
fclose(fp); /* On ferme le fichier */
}
/* Charge l'image dans le tableau */
void loadPPM(char* name, int image[]) {
FILE * fp = NULL;
char line[256];
int width, height, depth;
int col, row;
int red, green, blue;
fp = fopen(name,"r"); /* Ouverture du fichier */
if (fp == NULL)
printf("File %s not found !\n",name);
fgets(line,256,fp); /* On saute la ligne P3 */
fgets(line,256,fp); /* On saute la ligne de commentaire */
fscanf(fp, "%d %d", &width, &height); /* On lit la hauteur et la largeur*/
fscanf(fp, "%d", &depth); /* On lit la profondeur */
for(row = 0; row < height; row ++) /* Pour toutes les lignes */
{
for(col = 0; col < width; col ++) /* Pour toutes les colonnes */
{
fscanf(fp, "%d %d %d", &red, &green, &blue); /*On récupère les composantes*/
image[row * width + col] = color(red, green, blue); /*On met l'information de couleur dans le tableau image */
}
}
fclose(fp); /* On ferme le fichier */
}
int main() {
int hauteur, largeur;
/*Récupération de la hauteur/largeur */
sizePPM("image-logoESIEA-ascii.ppm", &largeur, &hauteur);
/*Déclaration du tableau qui contiendra l'image*/
int image[largeur * hauteur];
/* initialise l'image avec des pixels blancs */
mini_initImage(largeur, hauteur, image);
/*Chargement de l'image*/
loadPPM("image-logoESIEA-ascii.ppm", image);
/* ouvre à l'écran une fenêtre de dimension LxH */
mini_open("Projet super-cool", largeur, hauteur);
printf("press ESC to quit\n");
while(1) {
// affiche à l'écran l'image avec (0;0) en haut à gauche tant que ESC n'est pas pressé
mini_update(image);
}
mini_close ();
return 0;
}