Comment ecrire un .bmp à partir d'une autre

Fermé
faizazouari Messages postés 4 Date d'inscription dimanche 27 février 2011 Statut Membre Dernière intervention 12 juin 2011 - 27 févr. 2011 à 13:02
 Hip - 28 févr. 2011 à 05:49
Bonjour,

C'est le code que j'ai fait pour écrire un .bmp binarisé à partir d'un autre de taille 214*160.
Le but est d'afficher une nouvelle image binarisé.L'exécution s'est fu correctement mais lorsque j'ouvre le fichier .bmp ainsi cré ,rien ne s'affiche.Aider moi s'il vous plait.Y-a-t-il une faute dans le "fread" ou le "fwrite"(image bmp au niveau de gris et en 8bit/pixel)
#include <stdio.h>
#include <stdlib.h>
#include "StructureBMP.h"
#define _CRT_SECURE_NO_WARNINGS

unsigned char ** allocation(int NBL, int NBC)
{
int i, j;
unsigned char **image;

image = (unsigned char**)calloc(NBL,sizeof(unsigned char **));
if (image == NULL)
return(NULL);

for (i=0;i<NBL;i++)
{
image[i] = (unsigned char*)calloc(NBC,sizeof(unsigned char));
if (image[i] == NULL)
{
for (j=0;j<i;j++)
free(image[j]);

free(image);
return(NULL);
}
}

return(image);
}

void desallocation(unsigned char **image, int NBL)
{
int i;

if (image == NULL)
exit(0);

for (i=0;i<NBL;i++)
free(image[i]);

free(image);
}

void LireImageBMP(unsigned char** image, int NBL, int NBC)
{
char nom_image[256];
FILE * fic_image;
int i, j;
bmpheader bmph;
bmpinfo bmpinfoh;

getchar();
printf("Nom de l'image a ouvrir : \n");
gets(nom_image);

fic_image = fopen(nom_image,"rb");

if (fic_image == NULL)
{
printf("Erreur a l'ouverture de l'image ...\n");
exit(0);
}
else
printf("Image ouverte avec succes ...\n");
//fread(&bmph,sizeof(unsigned char),bmph.size,fic_image);
fread(&bmph,sizeof(bmpheader),1,fic_image);
fread(&bmpinfoh,sizeof(bmpinfo),1,fic_image);
for(i=0;i<NBL;i++)
{
for(j=0;j<NBC;j++)
{
fread(&image[i][j],1,1,fic_image);
}
}

fclose(fic_image);
}

void EcrireImageBMP(unsigned char** image, int NBL, int NBC)
{
char nom_image[256];
FILE * fic_image;
int i, j;
bmpheader bmph;
bmpinfo bmpinfoh;

getchar();
printf("Nom de l'image a ecrire : \n");
gets(nom_image);

fic_image = fopen(nom_image,"wb");

if (fic_image == NULL)
{
printf("Erreur a la creation de l'image ...\n");
exit(0);
}
else
printf("Image cree avec succes ...\n");
fwrite(&bmph,sizeof(bmph),1,fic_image);
fwrite(&bmpinfoh,sizeof(bmpinfoh),1,fic_image);
for(i=0;i<NBL;i++)
{
for(j=0;j<NBC;j++){

fwrite(&image[i][j],1,1,fic_image);
}
}

fclose(fic_image);
}

void SeuilImageBMP(unsigned char** image, int NBL, int NBC, int seuil)
{
int i, j;

for(i=0;i<NBL;i++)
{
for(j=0;j<NBC;j++)
{
if (image[i][j] < seuil)
{
image[i][j] = 0;
}
else
{
image[i][j] = 255;
}
}
}
}

int main()
{
unsigned char ** image;
int NBL, NBC, seuil;

printf("Nombre de lignes de l'image :\n");
scanf("%d",&NBL);
printf("Nombre de colonnes de l'image :\n");
scanf("%d",&NBC);

image = allocation(NBL,NBC);

if (image != NULL)
{
LireImageBMP(image,NBL,NBC);

printf("Seuil a appliquer : \n");
scanf("%d",&seuil);

SeuilImageBMP(image,NBL,NBC,seuil);
EcrireImageBMP(image,NBL,NBC);
desallocation(image,NBL);
}
else
{
printf("Erreur lors de l'allocation memoire! Sortie du programme.\n");
return 1;
}


return 0;
}

1 réponse

faizazouari Messages postés 4 Date d'inscription dimanche 27 février 2011 Statut Membre Dernière intervention 12 juin 2011
27 févr. 2011 à 20:17
En fin j'ai résolu le problème.Bon Week-end.
0
Bonjour, peux-tu nous fournir toute la méthode s'il te plaît, merci pour ceux qui en auront besoin :)
0