Taille de buffer pour récupérer tous les octets d'un fichier [Résolu]

cs_Tibabou 130 Messages postés mercredi 2 janvier 2002Date d'inscription 7 juillet 2012 Dernière intervention - 28 juil. 2007 à 12:00 - Dernière réponse : cs_Matt67 554 Messages postés samedi 6 septembre 2003Date d'inscription 6 mars 2010 Dernière intervention
- 28 juil. 2007 à 21:18
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
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
The_Guardian 318 Messages postés vendredi 25 mai 2007Date d'inscription 19 octobre 2007 Dernière intervention - 28 juil. 2007 à 15:22
3
Merci
Salut

Essaies de mettre "rb" dans son fopen au lieu de "r" si t'es sous windows
parce que "r" tout seul t'a deja pose des problemes, ca lisait pas tout ce que tu lui demandais

Une autruche ne se cuit pas aux petits lardons

Merci The_Guardian 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de The_Guardian
cs_Tibabou 130 Messages postés mercredi 2 janvier 2002Date d'inscription 7 juillet 2012 Dernière intervention - 28 juil. 2007 à 16:00
0
Merci
Merci The_Guardian, tout fonctionne très bien.

Tibabou
Commenter la réponse de cs_Tibabou
cs_Matt67 554 Messages postés samedi 6 septembre 2003Date d'inscription 6 mars 2010 Dernière intervention - 28 juil. 2007 à 21:18
0
Merci
Bonsoir,

Juste une petite remarque, soit tu fais du c alors utilise malloc (ou calloc) pour allouer de la memoire, soit du c++, dans ce cas, tu utilises les fonctions c++ qui font bien pour ouvrir, lire et fermer le fichier...

Matt...
Commenter la réponse de cs_Matt67

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.