Bonjour,
Je souhaite, tout simplement, récupérer tous les octets d'un fichier dans un tableau. Jusque là, rien d'extraordinaire.
J'essaie donc de récupérer les n octets d'un fichier BMP sans prendre l'entête (largeur*hauteur*3).
Ci-dessous, un résumé de mon code (j'ai mis l'essentiel et supprimé les différents tests).
unsigned char *bmpTab;
int width, height;
width = 624;
height = 352;
bmpTab = new unsigned char[width*height*3]; // tableau pour stocker l'image
FILE*fich;
fich=fopen("img.bmp","r");
fseek(fich,54, SEEK_SET); // je me place après l'entête
fread(bmpTab, 1, width*height*3, fich); // je lis tous les octets
fclose (fich);Je récupère donc, théoriquement, un tableau de 624*352*3 = 658 944 octets.
Le problème, c'est qu'à la fin de mon tableau (bmpTab), j'ai plein d'octets avec la valeur '205'.
A l'affichage, ça donne : la première ligne et 1/4 de la deuxième en "gris clair" (RGB = 205 205 205).
J'essaie donc de ralonger mon buffer... et je me rend compte que quand je change "width*height*3" par "width*height*3+512" cela affiche bien tous les bons pixels.
(512 ou plus d'ailleurs...)
Constat : width*height*3+512 = 658 944 + 512 = 659 456 octets (
la taille occupée sur le dique - cf propriétés du fichier)
La taille des clusters est de 4096 octets au maximum sur une partition formatée en NTFS mais il peut monter à 32Ko en FAT32, je n'ai pas envie d'allonger systématiquement mon buffer de 32768 octets pour être sûr que je récupèrerai tous les octets de mon fichier.
Quelqu'un peut-il me venir en aide ?
Merci d'avance.
Salutations
Tibabou