ENTETE DU FICHIER BMP (BIPMAP)

LeFauve42 Messages postés 239 Date d'inscription vendredi 20 octobre 2006 Statut Membre Dernière intervention 20 avril 2009 - 28 mars 2011 à 13:15
k.Lutchi Messages postés 25 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 27 septembre 2016 - 27 juin 2011 à 12:16
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/52959-entete-du-fichier-bmp-bipmap

k.Lutchi Messages postés 25 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 27 septembre 2016 10
27 juin 2011 à 12:16
Si des personnes sont sur un autre système que Windows ou Linux.
J’aimerai avoir un retour de test de mon programme sur un système d’exploitation qui lit autrement les données sur le disc dur.
Pour Windows et Linux du poids faible vert le poids fort.

Karl
k.Lutchi Messages postés 25 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 27 septembre 2016 10
27 juin 2011 à 12:09
J’ai fait un test suite à la lecture de l’article http://en.wikipedia.org/wiki/Stdint.h#Exact-width_integer_types.
Le test unitaire a posé problème et permet de confirmer l’utilité de ma source dans le cas d’utilisation à l’intérieur d’une structure.
J’ai fait un test en extérieur d’une structure.
Cela fonctionne correctement.

Le test a été effectué sur :
PC 64bits
Noyau UBUNTU 11.4 64 Bits
IDE Eclipse Helios

Voici la structure de test :
Typedef struct
{
int32_t i32Normal1;
int32_t i32Normal2;
int32_t i32Normal3;
int32_t i32X1;
int32_t i32Y1;
int32_t i32Z1;
int32_t i32X2;
int32_t i32Y2;
int32_t i32Z2;
int32_t i32X3;
int32_t i32Y3;
int32_t i32Z3;
int16_t iCouleur;
} StructEcritureSLT;

J’ai fait test de taille avec sizeof.
J’ai eu 52 octet à la place de 50 octet;
k.Lutchi Messages postés 25 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 27 septembre 2016 10
27 juin 2011 à 11:18
Merci LeFauve42
J'ai mis du temps pour répondre.
Sinon je vais étudier tes propositions
Et en faire un retour
dolabache Messages postés 1 Date d'inscription mercredi 9 avril 2008 Statut Membre Dernière intervention 19 avril 2011
19 avril 2011 à 17:56
merci
daminator2 Messages postés 12 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 4 décembre 2010
29 mars 2011 à 17:45
Il est vrai que tout ceci est inacceptable mais je pense qu'il faut retenir la dernière phrase car moi aussi la première fois je n'avait pas tout compris et j'avais fait la même erreur...
LeFauve42 Messages postés 239 Date d'inscription vendredi 20 octobre 2006 Statut Membre Dernière intervention 20 avril 2009
28 mars 2011 à 13:15
Bonjour,

Je vois un certain nombre de problemes dans ton source :
- D'abord, tu implementes des fonctions dans tes .h. Ceci est a proscrire, car en plus de plomber tes temps de compilation, ca empeche d'utiliser tes fonctions dans plusieurs fichiers .c
- Tu as dans tes .h une sequence #ifndef XXX ; #define XXX ; #endif. C'est suppose empecher les problemes d'inclusion multiple des .h, mais pour que ca fonctionne, les fonctions que tu declares dans ton .h doivent etre entre le "#define XXX" et le "#endif". Note bien que j'ai dit "declares" (ce que tu devrais faire) et pas "implementes" (ce que tu fais).

Pour ces deux points, je te conseillerai de jeter un oeil ici : http://gl.developpez.com/tutoriel/outil/makefile/#L1
L'exemple montre comment separer correctement les declarations et les implementations des fonctions.
Je te conseille aussi de lire le reste de l'article car les makefiles sont un moyen simple de recompiler ton projet quand tu as beaucoups de .c (et si tu developpes sous Linux, make et/ou gmake sont probablement deja installes sur ta machine).

Le dernier point est qu'il existe probablement un moyen de definir la structure entete des BMP d'une maniere portable (avec des types C qui ont la meme taille sur toutes les plateformes). Regarde ici par exemple : http://en.wikipedia.org/wiki/Stdint.h#Exact-width_integer_types
Dans ce cas, ton programme devient inutile... Mais ne t'inquiete pas pour ca, c'est comme ca qu'on apprend ;o)

Eric
Rejoignez-nous