J’expose mon petit problème puis mon code ensuite !
Voila, je tente le recopiage d’une image BMP avec un code de lecture d’image que mon maître de stage m’a filé auquel j’ai rajouté un peu de code afin de recupérer cette même image dans un autre fichier (programmation banale).
Le problème c’est que l’image recopiée quand je vais la voir ne fait que quelques octects alors que l’image de base fait plus de 3 Mo.
Lorsque je vais modifier cette image avec Paint, que j’y mets juste un point et que j’enregistre la modif apportée et bien là comme par miracle l’image prend la même taille que celle d’origine mais ne ressemble en aucun cas à l’image de départ.
Donc si vous voyez quelque modif à faire à mon code n’hésitez pas.
Moi je n’ai rajouté que les lignes qui sont précédées d’un /**/
//---------------------------------------------------------------------------
int BMP_LireImage (const char *nomFichier, unsigned char *bufferImg, int tailleBuffer)
//---------------------------------------------------------------------------
{
int F;
int Fnew;
BITMAPFILEHEADER bmpFileHeader;
BITMAPINFOHEADER bmpInfoHeader;
int tailleImg;
F = OpenFile (nomFichier, VAL_READ_ONLY, VAL_OPEN_AS_IS, VAL_BINARY);
/**/
Fnew = OpenFile ("img/Test laser new.bmp", VAL_WRITE_ONLY, VAL_OPEN_AS_IS, VAL_BINARY);
if (F<0) return -1;
//lire l'entête
ReadFile(F, (char*)&bmpFileHeader, sizeof(bmpFileHeader));
if (!(bmpFileHeader.bfType == ('M'<<8)|'B')) {
//erreur
return -1;
}
/**/
WriteFile(Fnew,(char *)&bmpFileHeader, sizeof(bmpFileHeader));
ReadFile(F, (char*) &bmpInfoHeader, sizeof(bmpInfoHeader));
/**/
WriteFile(Fnew,(char*) &bmpInfoHeader, sizeof(bmpInfoHeader));
//vérifier que le buffer a une taille suffisante
tailleImg = bmpInfoHeader.biWidth * bmpInfoHeader.biHeight * bmpInfoHeader.biBitCount/8;
if(tailleBuffer<tailleImg) return -1;
//pointer et lire le buffer image
SetFilePtr (F, bmpFileHeader.bfOffBits, 0);
ReadFile(F, bufferImg, tailleImg);
/**/
WriteFile(Fnew,bufferImg, sizeof(bufferImg));
/**/
CloseFile(Fnew);
CloseFile(F);
return 0;
}
j’a l’impression que l’image fait la même taille parce que la copie de l’header a marché, mais je dirais que le reste de la copie a échoué à cause de ce test
if(tailleBuffer<tailleImg) return -1;
dès que l’image est plus grosse que le buffer, tu sort là dessus, essaie sur une petite image pour analyser, ou de monter le buffer à plus de 3 Mo.
mais la bonne façon de faire est de ne lire que la taille du buffer, et de boucler jusqu’à la fin du fichier (d’ailleurs il doit déjà y avoir des algo de copie de fichier un peu mieux fait en C, je m’en remet aux autres forumeurs)
non non il passe ce test sans problème ! et pour info mon image fait plus de 3 Mo, le problème ne vient pas de là à mon avis !
je pense que c’est un writeFile qui merde mais j’en suis pas sûr …