Probleme lecture fichier bitmap (valeur 255 qui apparait)

Résolu
cs_nico3fr Messages postés 2 Date d'inscription vendredi 2 avril 2004 Statut Membre Dernière intervention 3 novembre 2004 - 3 nov. 2004 à 03:16
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.

2 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
3 nov. 2004 à 08:51
il faut l'ouvrir en mode binaire
=> #define mode "rb"
3
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
ah ben je me doutais bien que ca devait être un truc a la con, merci bien pour ta réponse ;)
0
Rejoignez-nous