Bonjour,
Je souhaite faire un fichier *.bmp. D'après ce que j'ai vu les types int char... dépendent des compilos et OS, donc j'ai tenté une écriture en dur.... mais je m'emmêle complétement les pinceaux sur le résultats obtenus entre les %X, fprintf et fwrite
Définition de la structure *.bmp (que j'ai d'ailleurs récupérée sur le net):
Ensuite je souhaite remplir mes champs un à un :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 struct { /* Debut entete du fichier */ char bfType [2]; // type du fichier : doit contenir BM (ou en hexadécimal 424D) char bfSize [4]; //taille du fichier en octets char bfReserved1 [2]; // réservé (doit être 0000) char bfReserved2 [2]; // réservé (doit être 0000) char bfOffBits [4]; // offset des données depuis la structure /* Fin entete du fichier */ /* Debut entete de l'image */ char biSize [4]; // nombre d'octets de la structure char biWidth [4]; // largeur du bitmap en pixels char biHeight [4]; // hauteur de la bitmap en pixels char biPlanes [2]; // nombre de plans (doit être 0001) char biBitCount [2]; // nombre d'octets par pixel (cf. Annotations finales) char biCompression [4]; // type de compression (cf. Annotations finales) char biSizeImage [4]; // taille de l'image en octets (cf. Annotations finales) char biXPelsPerMeter [4]; // résolution horizontale en pixels par mètre char biYPelsPerMeter [4]; // résolution horizontale en pixels par mètre char biClrUsed [4]; // nbre de couleurs utilisées (0=biBitCount) (cf. Annotations finales) char biClrImportant [4]; // nombre de couleurs considérées comme importantes pour afficher le bitmap (si non nul, toutes couleurs importantes) /* Fin entete de l'image */ }bmp_struct;
puis (j'attends à m'attirer les foudres de tous le monde) j'écris l'ensemble de ma structure dans un fichier texte :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 /* Remplir la structure du bmp */ sprintf(bmp_struct.bfType, "BM"); // type du fichier : doit contenir BM (ou en hexadécimal 424D) // 2 octets printf("Nb : %04d %04x\n", nb_lig_TOT*nb_pix_TOT, nb_lig_TOT*nb_pix_TOT); sprintf(s_dbl_octet, "%04x", nb_lig_TOT*nb_pix_TOT); //taille du fichier en octets // A REVOIR //printf("|%04x| |%04X|\n", s_dbl_octet, s_dbl_octet); sprintf(bmp_struct.bfSize, "%s", s_dbl_octet); //taille du fichier en octets // A REVOIR sprintf(bmp_struct.bfReserved1, 0x0000); // réservé (doit être 0000) // 2 octets sprintf(bmp_struct.bfReserved2, 0x0000); // réservé (doit être 0000) // 2 octets sprintf(bmp_struct.bfOffBits, "%04d", 2*54); // offset des données depuis la structure /* Fin entete du fichier */ /* Debut entete de l'image */ sprintf(bmp_struct.biSize, "%04d", 40); // nombre d'octets de la structure sprintf(bmp_struct.biWidth, "%04d", nb_pix_TOT); // largeur du bitmap en pixels sprintf(bmp_struct.biHeight, "%04d", nb_lig_TOT); // hauteur de la bitmap en pixels sprintf(bmp_struct.biPlanes, "%02d", 0x0001); // nombre de plans (doit être 0001) // 2 octets sprintf(bmp_struct.biBitCount, "%02d", 0x0001); // nombre d'octets par pixel (cf. Annotations finales) // 2 octets sprintf(bmp_struct.biCompression, 0x00000000); // type de compression (cf. Annotations finales) sprintf(bmp_struct.biSizeImage, 0x00000000); // taille de l'image en octets (cf. Annotations finales) sprintf(bmp_struct.biXPelsPerMeter, 0x00000000); // résolution horizontale en pixels par mètre sprintf(bmp_struct.biYPelsPerMeter, 0x00000000); // résolution horizontale en pixels par mètre sprintf(bmp_struct.biClrUsed, 0x00000000); // nbre de couleurs utilisées (0=biBitCount) (cf. Annotations finales) sprintf(bmp_struct.biClrImportant, 0x00000000); // nombre de couleurs considérées comme importantes pour afficher le bitmap (si non nul, toutes couleurs importantes)
Sachant que nb_lig_TOT = 11 et nb_pix_TOT = 17 d'ou le produit vaut 187.Code:
1
2
3
4 char *pt_s_buf; [...] pt_s_buf = (void *) &bmp_struct; fwrite(pt_s_buf, sizeof(char), sizeof(bmp_struct), f_temp);
J'aurais aimé avoir dans mon fichier pour le champ bfSize :
la valeur ascii de 0xBB (soit un double guillemet fermé)
C'est là que je m'emmêle, j'obtiens soit 00BB, soit d'autres trucs est ce que les fonctions sprintf et/ou fwrite modifie la valeur en char ?
Merci de m'aider ou de m'indiquer ou chercher !