Pb : lecture d'un fichier bmp, "decalage"

fiston_67 Messages postés 2 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 11 février 2004 - 10 févr. 2004 à 14:45
fiston_67 Messages postés 2 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 11 février 2004 - 11 févr. 2004 à 00:14
Le problème est le suivant : je souhaite lire un fichier bmp couleur 24 bits et 16 millions de couleur, et stocker le resultat dans 3 matrices rouge, vert et bleu.

Voici le code que j'utilise :
int lit_bmp(char *source){ //source = fichier à lire
FILE * ptr_src;

if((ptr_src=fopen(source,"rb"))!=NULL)
{
for (int i=0;i<offset;i++) fgetc(ptr_src);
for (int y=0;y<hauteur;y++)
{
for (int x=0;x<longueur;x++)
{
ecran_b[x+y*longueur]=(unsigned char)fgetc(ptr_src);
//ecran_b, ecran_r et ecran_v designent des tableaux (correctement alloués ds une fct précédente
//ecran_r = contient les pixels rouges de l'image ...
ecran_v[x+y*longueur]=(unsigned char)fgetc(ptr_src);
ecran_r[x+y*longueur]=(unsigned char)fgetc(ptr_src);
}
}
fclose(ptr_src);

}
return 0;
}

Le problème est que quand je teste ce dernier (et que je reconstitue l'image, il y a "un decalage" très bizarre, particulièrement dans le tiers en haut à gauche de l'image. En consultant les archives, j'ai vu que je n'etais pas le seul à avoir ce problème. La solution suggérée est d'enregistrer une image en bmp 24 bits, mais l'image en question doit posséder 256 couleurs seulement.
Or, cela ne me satisfait pas, je veux pouvoir traiter des images à 16 millions de couleur, alors j'attend vos suggestions avec impatience.

Ah oui, je developpe sous Borland c++ (win xp).

3 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
10 févr. 2004 à 21:01
j'ai déja rencontré ce problème.En fait selon la taille de la bitmap, entre chaque ligne, il peut y avoir 0, 1 ou 2 octets. Cela varie en fonction de la valeur de longeur%3.
Je ne suis pas sur de ce que je te dis, meme pas si c'est ca ton problème, mais tu n'as diminuer la largeur de ton image de 1 ou 2 pixels et normalement le pb disparait. Dans le cas général, tu dois dont lire 1 ou 2 caractères à la fin de chaque ligne en fonction de la valeur de longueur.
0
sebseb42 Messages postés 495 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 9 novembre 2007 1
10 févr. 2004 à 22:42
oui c'est le probleme quil a, seulement c'est longeur % 4 et non pas 3

une petite finte et tu sera tranquil

met ce code en haut de ta fonction, la declaration de longueur_useless au debut, et longueur_useless = longueur % 4; juste apres avoir definit longueur;

int    longueur_useless;

// ...
// definition de longueur;
longueur_useless = longueur % 4;


ensuite, a la fin de ta boucle x, tu met ca :

for (x = 0; x < longueur_useless; x++)
    fgetc(ptr_src);


et voila, ca va te zapper automatiquement les donnes indesirable
0
fiston_67 Messages postés 2 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 11 février 2004
11 févr. 2004 à 00:14
Merci beaucoup je vous doit une fière chandelle (; !
0
Rejoignez-nous