Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Taille de buffer pour récupérer tous les octets d'un fichier [ Windows / Fichier & Disque ] (Tibabou)

samedi 28 juillet 2007 à 12:00:27 | Taille de buffer pour récupérer tous les octets d'un fichier

Tibabou

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

samedi 28 juillet 2007 à 15:22:21 | Re : Taille de buffer pour récupérer tous les octets d'un fichier

The_Guardian

Réponse acceptée !
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

samedi 28 juillet 2007 à 16:00:40 | Re : Taille de buffer pour récupérer tous les octets d'un fichier

Tibabou

Merci The_Guardian, tout fonctionne très bien.

Tibabou

samedi 28 juillet 2007 à 21:18:31 | Re : Taille de buffer pour récupérer tous les octets d'un fichier

Matt67

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...



Cette discussion est classé dans : fichier, octets, width, height, fich


Répondre à ce message

Sujets en rapport avec ce message

GetDlgItem? [ par jimtruand ] salut!le but de mon prog MFC est de pouvoir saisir du texte dans une edit box et de recopier le texte dans un fichier.docquand je clique sur le bouton c++ creation d'un fichier texte a nom variable [ par sloaneaaaa ] ben voila je voudrai creer un fichier texte auquel je puisse donner n'importe quel nom ms g des erreurs que je comprend pasle nom de fichier est ds un Integration fonction C [ par metek ] Bonjour!!Voila j'ai une ptite question sur les API!!!J'ai fait un petit programme qui liste un fichier texte cherche un mot entré et recupere le reste envoi fichier via socket [ par elanspeech ] Bonjour,J'ai fait un client/serveur, la communication se passe bien. cependant, je ne parviens pas a envoyer plusieurs fichiers a la suite avec la soc Modifier des octets dans un fichier ? [ par supergrey ] Salut, je voudrais savoir comment modifier des octets au milieu d'un fichier, jusqu'ici je recopier tout le fichier en changeant les octet voulu mais Allocation dynamique 3 dimensions [ par gilimcce ] Bonsoir,J'alloue la mémoire d'un tableau contenant les pixels d'une image. Si je déclare classiquement mon tableau ( ex: image[512][1024][3] ) tout se Probleme de thread qui bug quand on bouge la souris [ par squellettor ] Bonjour,Je programme actuellement sous borland C++ v6 et j'ai un gros bug de thread.Je fait un visualisateur d'image qui créé des thumbnails pour chaq [ActiveX] commnet récupérer les attributs Height / Width ? [ par teamkiller ] Je programme en VC++ 2003 et je souhaite à l'intérieur de mon programme récupérer les attributs height / width de la balise object . J'ai réussi à ré Probleme urgent [ par pozor16 ] Une image est composée d'un ensemble de points (des pixels) dont on peut fixer la couleur en donnant la valeur des 4 composantes qui composent une cou Octets squatteur [ par gdpasmini ] Bonjour a tous ! Un phénomène étrange se produit dans mon programme... Je suis censé prendre des données provenant d'un réseau que je place octet par


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,312 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.