1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
| #include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main()
{
//Déclaration des variables
int test = 0, largeur = 0, hauteur = 0, taille = 0;
int i = 0, val = 0;
unsigned char * imagegrey = NULL;
unsigned char buffer[100];
FILE *imA; // Image mario.bmp
FILE *imB; // Image mariogrey.bmp
// Ouverture de mario.bmp
imA = fopen( "mario.bmp", "r+" );
if( imA == NULL )
{
puts("Impossible d'ouvrir !\n");
return 1;
}
// Ouverture de mariogrey.bmp et création si elle n'existe pas
imB = fopen( "mariogrey.bmp", "w+" );
if(imB==NULL)
{
puts("Impossible d'ouvrir !\n");
return 1;
}
// Lecture et récupération de l'entete de mario.bmp
test = fread(buffer,54,1,imA);
if( test == 0 )
{
puts("Impossible de lire le fichier !\n");
return 1;
}
// Recopiage de l'entete de mario.bmp dans celle de mariogrey.bmp
test = fwrite(buffer,54,1,imB);
if( test == 0 )
{
puts("Impossible d'ecrire dans le fichier !\n");
return 1;
}
// Recherche de la hauteur et de la largeur de l'image
fseek(imB,0x12,SEEK_SET);
// Récupération de le largeur de l'image de mariogrey.bmp
fread(&largeur,4,1,imB);
// Récupération de la hauteur de l'image de mariogrey.bmp
fread(&hauteur,4,1,imB);
// Affichage des valeur récupérées précedemment
printf( "Largeur: %d\n", largeur );
printf( "Hauteur: %d\n", hauteur );
// Calcul de la taille de l'image en octets...
taille = largeur*hauteur*3 ;
// ...et affichage de sa valeur
printf( "Taille de mariogrey.bmp : %d\n",taille );
// On fait une allocation dynamique du tableau image du nombre d'octets calculés precedement
imagegrey = (unsigned char *)malloc(taille);
// On vérifie si l'allocation a marché ou pas
if (imagegrey == NULL)
{
// Si non, on arrete tout ! mouahahah ( désolé il est tard :( )
exit(0);
}
// On remplit le tableau imagegrey avec le contenu image de mario.bmp
test=fread(imagegrey,taille,1,imA);
if(test==0)
{
puts("Fin de fichier ou erreur de lecture imagegrey !\n");
}
// On Convertit le tableau imagegrey en niveau de gris
i = 0;
while ( i < taille ){
// Val prend la moyenne des couleurs primaires
val=(imagegrey[i]+imagegrey[i+1]+imagegrey[i+2])/3;
imagegrey[i]=val;
imagegrey[i+1]=val;
imagegrey[i+2]=val;
i = i + 3;
}
// On ecrit le tableau imagegrey dans mariogrey.bmp
test = fwrite(imagegrey,taille,1,imB);
// On libère la mémoire allouée avec malloc, on n'en a plus besoin
free(imagegrey);
//Message de fin
printf("Voila, votre image a été convertit en niveaux de gris !\n");
printf("Elle s'appelle mariogrey.bmp !");
// Fermeture des fichier mario et mariogrey
test = fclose(imA);
if ( test == EOF )
{
puts( "Impossible de fermer le fichier!!\n" );
return 1;
}
test = fclose(imB);
if( test == EOF )
{
puts("Impossible de fermer le fichier !\n");
return 1;
}
getchar();
return 0;
} |
Partager