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

Messages postés
130
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
7 juillet 2012
- 28 juil. 2007 à 12:00 - Dernière réponse :
Messages postés
554
Date d'inscription
samedi 6 septembre 2003
Dernière intervention
6 mars 2010
- 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
Messages postés
318
Date d'inscription
vendredi 25 mai 2007
Dernière intervention
19 octobre 2007
- 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é 90 internautes ce mois-ci

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

Tibabou
Commenter la réponse de cs_Tibabou
Messages postés
554
Date d'inscription
samedi 6 septembre 2003
Dernière intervention
6 mars 2010
- 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.