Probleme lecture fichier bitmap (valeur 255 qui apparait) [Résolu]

Messages postés
2
Date d'inscription
vendredi 2 avril 2004
Statut
Membre
Dernière intervention
3 novembre 2004
- - Dernière réponse : cs_nico3fr
Messages postés
2
Date d'inscription
vendredi 2 avril 2004
Statut
Membre
Dernière intervention
3 novembre 2004
- 3 nov. 2004 à 12:21
Je suis désespéré et au bord du suicide, donc je pense être dans la bonne section.

A part ca, je vais essayer de pas trop jouer mon boulet. Je suis pas vraiment un pro de l'informatique et j'aimerais juste pouvoir lire les octets d'un fichier bitmap.

J'ai bien étudié la norme bitmap, j'arrive a bien lire le header, à réccupérer les premières données, mais voila, après quelques lignes de lecture les données lues ne sont plus du tout les bonnes, je ne lis plus que des valeurs 255 qui ne sont absolument pas présente dans l'image (j'ai vérifié ca avec un éditeur hexadécimal). Enfin, je vais pas trop m'attarder dans la description du problème et je vais laisser quelques "pros" du language C jeté un coup d'oeil à ce que j'ai écrit comme programme et j'espère que quelqu'un saura trouver une solution à mon probleme.

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

int main()
{
#define nom "C:\\Projet\\bitmap\\test.bmp"
#define mode "r"

FILE *fichier;

int i, j;
int largeur_image, hauteur_image, offset, compteur = 0;
unsigned char pixel;

fichier = fopen(nom, mode);
printf("Nom de l'image : %s", nom);
fseek(fichier, 10, SEEK_SET); //offset de position des premières données

offset = fgetc(fichier) + fgetc(fichier) * 256 + fgetc(fichier) * 65536 + fgetc(fichier) * 16777216;

printf("\nOffset de l'image = %d", offset);
fseek(fichier, 18, SEEK_SET); //largeur de l'image

largeur_image = fgetc(fichier) + fgetc(fichier) * 256 + fgetc(fichier) * 65536 + fgetc(fichier) * 16777216;

printf("\nLargeur de l'image = %d", largeur_image);

hauteur_image = fgetc(fichier) + fgetc(fichier) * 256 + fgetc(fichier) * 65536 + fgetc(fichier) * 16777216;

printf("\nHauteur de l'image = %d", hauteur_image);
fseek(fichier, offset, SEEK_SET); //debut des premières données

compteur = 0;
for(i=0; i<hauteur_image; i++)
{
for(j=0;j<largeur_image;j++)
{
pixel = fgetc(fichier);
if (pixel == 255)
{
compteur++;
}
}
}

fclose(fichier);
printf("\n\nValeur 255 apparait %d fois !!", compteur);
getch();
}

Voila donc mon code et en mettant une image 1024*768, 8 bits (256 nuances de gris) j'arrive à bien lire le header de l'image, et j'arrive à bien lire les premières ligne de données de l'image, mais arrivé à un certain moment (au 10.601 ème pixel sur mon image) je n'arrive plus à lire que des 255 comme valeur.

Je ne sais pas d'ou viennent ses données qui finissent de remplir mon fichier.

Merci d'avance à toute personne pouvant m'aider à résoudre ce probleme.
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
3
Merci
il faut l'ouvrir en mode binaire
=> #define mode "rb"

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 129 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ymca2003
Messages postés
2
Date d'inscription
vendredi 2 avril 2004
Statut
Membre
Dernière intervention
3 novembre 2004
0
Merci
ah ben je me doutais bien que ca devait être un truc a la con, merci bien pour ta réponse ;)
Commenter la réponse de cs_nico3fr