Voici un petit programme en C qui permet de lire une image BMP et de l'enregistrer, dans le but de faire des opérations sur celle-ci ensuite.
Mon problème est que lorsque j'enregistre une image linéaire (environ 50 pixels), deux pixels (un bleu et un rouge) apparaissent sur l'image. (mais j'ai quand même une image !!!)
Et lorsque l'image est une image normal, je n'obtiens que du blanc.
Si vous voyez ce qui ne vas pas ca m'aiderait beaucoup.
#include "stdio.h"
#include "stdlib.h"
#include "windows.h"
#include "math.h"
int main(int argc,char*argv[])
{
FILE *imgDep,*imgFin;
unsigned long nb, nbLu, nbEcri;
unsigned char *pixel;
BITMAPFILEHEADER bmfh;
BITMAPINFOHEADER bmih;
RGBQUAD *rgbq;
// LECTURE DES DONNEES DE LIMAGE
imgDep = fopen("C:\\windows\\bureau\\TraitementImage\\images\\linessaiss.bmp","rb");
if (imgDep == NULL)
{printf ("Problemes images depart 1");
return (0);}
nb=1;
nbLu=fread(&bmfh,sizeof(BITMAPFILEHEADER),nb,imgDep);
if(nbLu!=nb)
{
fclose(imgDep);
printf("prb lecture\n");
return(0);
}
nbLu=fread(&bmih,sizeof(BITMAPINFOHEADER),nb,imgDep);
if(nbLu!=nb)
{
fclose(imgDep);
printf("prb lecture2\n");
return(0);
}
printf("image de largeur %d et de hauteur %d\n\n",bmih.biWidth,bmih.biHeight);
nb=bmih.biClrUsed;
rgbq=(RGBQUAD*)malloc(nb*sizeof(RGBQUAD));
if(rgbq) nbLu=fread(rgbq,sizeof(RGBQUAD),nb,imgDep);
if(nbLu!=nb)
{
fclose(imgDep);
printf("prb lecture3\n");
return(0);
}
nb= bmih.biHeight*bmih.biPlanes*bmih.biBitCount/8;
//nb= bmih.biHeight*3;(image linéaire)
pixel=(unsigned char*)malloc(nb*sizeof(unsigned char));
if(pixel)nbLu=fread(pixel,sizeof(unsigned char),nb,imgDep);
if(nbLu!=nb)
{
fclose(imgDep);
printf("prb lecture4\n");
return(0);
}
fclose (imgDep);
// ECRITURE
imgFin = fopen("C:\\windows\\bureau\\TraitementImage\\resultat\\resultat.bmp","wb");
if (imgFin == NULL)
{printf ("Problemes images depart 1");
return (0);}
nb=1;
nbEcri=fwrite(&bmfh,sizeof(BITMAPFILEHEADER),nb,imgFin);
if(nbEcri!=nb)
{
fclose(imgFin);
free(rgbq);
free(pixel);
printf("prb ecriture1\n");
return(0);
}
nbEcri=fwrite(&bmih,sizeof(BITMAPINFOHEADER),nb,imgFin);
if(nbEcri!=nb)
{
fclose(imgFin);
free(pixel);
free(rgbq);
printf("prb ecriture2\n");
return(0);
}
nb=bmih.biClrUsed;
nbEcri=fwrite(rgbq,sizeof(RGBQUAD),nb,imgFin);
if(nbEcri!=nb)
{
fclose(imgFin);
free(rgbq);
printf("prb ecriture3\n");
free(pixel);
return(0);
}
nb= bmih.biHeight*3;
nbEcri=fwrite(pixel,sizeof(unsigned char),nb,imgFin);
if(nbLu!=nb)
{
fclose(imgFin);
free(pixel);
free(rgbq);
printf("prb ecriture4\n");
return(0);
}
free(pixel);
free(rgbq);
fclose (imgFin);
return (0);
}