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 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211
| #include <stdio.h>
#include <stdlib.h>
#include <string.h> // Pour la fonction strcat
#define DEBUG // Pour eviter les Bugs
typedef unsigned char uc; //pour faciliter la saisie
typedef unsigned int ui;
typedef unsigned short us;
// Declaration de la structure de l'en tête du fichier
typedef struct {
char sign[2]; // Signature BMP
ui total_size; // taille totale du fichier (sur 4 Octets)
//??? int champ_res;
int offset;
// Declaration de la structure de l'en tête de l'image
ui taille; //taille en tête image
ui largeur; //largeur (width)
ui hauteur; //hauteur (height)
us nbr_plans; // toujours egal à 1
int codage; // sur 1,4,8,16,24, ou 32 bits
us compression; // = O si pas de compression , et 1 2 ou 3 selon types
int taille_tot; //taille totale de l'image en octets
ui resolution_h; //la resolution horizontale (nbre pixels)
ui resolution_v; // la resolution verticale
ui nbre_coul; // nombre de couleurs
unsigned char* pixel;
}bitmap;
////////////////////////////////////////////////////////
//prototypes des fcts
bitmap* lecture(char*) ;
int conv (uc hex[4],ui) ;
//??int vect[10304];
int main(int argc, char *argv[])
{
//declaration des variables utiles dans notre programme
int h,l,i=0,j=0,k,nbl,nbc;
char nom[100],et[54]; unsigned char A[320],R[240][320],x,V[240][320],B[240][320],x1,x2;
bitmap *b; // recupération des infos de l'image
FILE* fp;
// Recup du nom de l'image
printf("Entrez le nom de l'image \n");
gets(nom);
strcat(nom,".bmp");
printf("Nom de l'image avec l'extension : %s\n",nom);
// ouverture du fichier
b=lecture(nom);
fp=fopen(nom,"r");
//si l'image n'existe pas on affiche un message d'erreur
if (fp==NULL){
printf("Ouverture impossible de %s\n ( - Erreur : Image introuvable ) \n",nom);
scanf("%*c");
exit(0);
}
//sinon on récupèr les infos
//
printf("La signature BMP de l'image :%.2s\n",b->sign);
printf("Taille du Fichier : %d \n ",b->total_size);
printf("Offset de l'image : %d \n",b->offset);
printf("Taille en tete de l'image : %d\n",b->taille);
printf("Largeur (nombre de colonnes : %d \n",b->largeur);
printf("Hauteur (nombre de lignes :%d \n",b->hauteur);
printf("Nombre de plans : %d\n",b->nbr_plans);
printf("Codage : %d\n",b->codage);
printf("Compression : %d\n",b->compression);
printf("Taille totale de l'image : %d\n",b->taille_tot);
printf("Resolution Horizontale :%d\n",b->resolution_h);
printf("Resolution Verticale : %d\n",b->resolution_v);
printf("Nombre de couleurs :%d\n",b->nbre_coul);
h=b->hauteur;
l=b->largeur;
printf("Lignes : %d Colonnes : %d\n",h,l);
fclose(fp);
fp=fopen(nom,"rb");
fread(et,sizeof(char),54,fp);
// Matrice
nbc=l/2;nbl=nbl/2;
printf("La matrice a ete divisee en deux : \nNombre lignes :%d Nombre colonnes:%d\n",h,nbc);
for(j=0;j<20;j++) {
for (i=0;i<nbc;i++)
{ R[j][i]=0;}}
for(j=0;j<20;j++) {
for (i=0;i<nbc;i++)
{
R[j][i]=*(b->pixel)++;
printf("%d ",R[j][i]);
}printf("\n fin de la ligne %d\n",j);}
fclose(fp);
printf("%d",x1);
/* fp=fopen("rouge.ima","wb");
for (i=0;i<h;i++)
{
for(j=0;j<l;j++)
A[j]=R[i][j];
fwrite(A,sizeof(unsigned char),l,fp);
printf("%d ",A[j]);
}
fclose(fp);*/
////// Affichage de la matrice /////////////////////:
//////: Avec sdl ////////
// for(i = 0 ; i < monImage.w * monImage.h ; i+=3)
//{
// imageRGB[i]; // Red
// imageRGB[i+1]; // Green
//imageRGB[i+2]; // Blue
//}
#ifdef DEBUG
printf("fin du programme");
scanf("%*c");
#endif
system("PAUSE");
}
////////////////////////////////////////////// FONCTIONS //////////////////////////////////////////////////////////////
bitmap* lecture(char* nom)
{
uc temp[4]; // chaine de carac temporaire qui sera utilisé pour récupérer les différentes infos
bitmap *bmp; // La variable que renvoie bitmap()
FILE *fichier;
bmp=(bitmap*)malloc(sizeof(bitmap)); // on alloue dynamiquement le pointeur sur bitmap
fichier = fopen(nom,"r"); // on ouvre le fichier en lecture seule
fread (bmp->sign,2,1,fichier); // on récupère la signature
fread (&temp,4,1,fichier); // la taille de l'image
bmp->taille_tot = conv(temp,4); // que l'on converti en décimal
//fread (&temp,4,1,fichier); // la zone réservée
//bmp->champ_res=conv(temp,4);
fread (&temp,4,1,fichier); // l'offset
bmp->offset = conv(temp,4); // que l'on converti aussi
fread (&temp,4,1,fichier); // taille de la zone info
bmp->taille= conv (temp,4);
fread (&temp,4,1,fichier); // la largeur de l'image
bmp->largeur = conv(temp,4);
fread (&temp,4,1,fichier); // la hauteur de l'image
bmp->hauteur = conv(temp,4);
fread (&temp,2,1,fichier); // le nombre de plans (=1)
bmp->nbr_plans = conv (temp,2);
fread (&temp,2,1,fichier); // le mode d'affichage
bmp->codage = conv (temp,2);
fread (&temp,4,1,fichier); // le format de compression
bmp->compression = conv (temp,4);
fread (&temp,4,1,fichier); // la taille de l'image
bmp->total_size= conv (temp,4);
fread (&temp,4,1,fichier); // les résolutions horizontale
bmp->resolution_h = conv (temp,4); // et verticale
fread (&temp,4,1,fichier);
bmp->resolution_v = conv (temp,4);
fread (&temp,4,1,fichier);
bmp->nbre_coul = conv (temp,4); // nbre de couleurs utilisées
fclose (fichier); // on ferme le fichier
bmp->pixel=(unsigned char*)malloc(sizeof(bmp->taille_tot));
fread(bmp->pixel,1,bmp->taille,fichier);
return bmp; // on retourne le pointeur sur la structure bitmap
}
int conv(unsigned char hex[4],unsigned int nb)
{
int res=0,i;
for (i=nb-1;i>=0;i--)res=res*256+hex[i];
return res;
} |
Partager