Table des couleurs et données d'une image BMP

Résolu
cs_didinel Messages postés 7 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 21 août 2005 - 18 août 2005 à 16:24
cs_didinel Messages postés 7 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 21 août 2005 - 19 août 2005 à 10:45
Bonjour à tous,

Je souhaiterais savoir comment on peut récupérer la table des couleurs et les données d'une image BMP en parcourant seulement le fichier bmp.

Je développe un programme console en C traditionnel qui a pour but de récopier petit à petit le fichier BMP (FILE *fSrc) dans un fichier RTF (FILE *fDest) . Je recopie le fichier petit à petit pour pouvoir insérer les balises nécessaires pour la lecture de l'image dans le fichier RTF.

J'arrive à récupérer correctement l'entête du fichier et l'entête d'information mais pas la table des couleurs et les données de l'image.

Est ce que quelqu'un aurait une solution à mon problème?

Merci d'avance.

didinel

3 réponses

cs_didinel Messages postés 7 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 21 août 2005
19 août 2005 à 10:45
Merci à tous les deux pour les réponses, mais y a un truc que je calcule pas voici comment est codée une image BMP dans un fichier RTF :

{\rtf1\ansi\ansicpg1252\deff0\deflang1036{\fonttbl{\f0\fswiss\fcharset0 Arial;}}
\viewkind4\uc1\pard\f0\fs20{\object\objemb{\*\objclass Paint.Picture}\objw719\objh719{\*\objdata
01050000
02000000
07000000
50427275736800
00000000
00000000
00050000
424df80400000000000076000000280000003000000030000000010004000000000000000000c3
0e0000c30e00000000000000000000000000000000800000800000008080008000000080008000
8080000080808000c0c0c0000000ff0000ff000000ffff00ff000000ff00ff00ffff0000ffffff
004444444c44444444c4c444444444c4c44444444c444444444444ccc44444444c44c444444444
c44c44444444ccc4444444cc44444444444c4c44444444444c4c44444444444cc4444c44444444
4444c44c44444444444c44c444444444444c444c444cccc444cc44c4444444444444c44cc444cc
cc444c444c44c4444ccc444c444444444444444c444ccc4444c44c44c44c4444444444c4444444
4c44444444c4444444444c44c4c4c4444cc444cc44444444ccc44444444cc444cc4444c4c4cc4c
44c44ccc44444444ccc4ccc44444444ccc44c44c4cc44444c44c44444444444cc44c44cc444444
44444c44c4444c4444c44c4444444444cc4ccccc4cc4444444444c44c444444444c44c44444444
4cc4ccccccc4cc444444444c44c44444444c44c4444444444cc4ccccccc4cc4444444444c44c44
44444c44c444444444cc4ccccccccc4cc444444444c44c444444c44c4444444444cc4ccccccccc
4cc4444444444c44c444cc44c44444444444cc4cccc4cccc4cc44444444444c44cc4444c444444
4444444cc4cc4c4cc4cc4444444444444c444c4cc44444444ccc44cccc4c4c4c4cccc44ccc4444
4444cc44c44444444cccccccccc4cc4c4cc4cccccccccc44444444c444444444ccc444cccc4cc4
ccc4cc4cccc444ccc44444444c4444444cc44ccc4444ccc4ccc4ccc4444ccc44cc444444444444
44cc4cccccccccccc4ccc4cccccccccccc4cc4444444444444c4ccccccccccc44ccccc44cccccc
ccccc4c444444444444cc4cccccccc444ccccccccc444cccccccc4cc44444444444c4cccccccc4
ccccccccccccccc4cccccccc4c44444444444cc4cccccccc444ccccccccc444cccccccc4cc4444
44444444c4ccccccccccc44ccccc44ccccccccccc4c4444444444444cc4cccccccccccc4ccc4cc
cccccccccc4cc44444444444444cc44ccc4444ccc4ccc4ccc4444ccc44cc4444444444444444cc
c444cccc4cc4ccc4cc4cccc444ccc44444444cc44444444cccccccccc4cc4c4cc4cccccccccc44
444444c44cc44444444ccc44cccc4c4c4c4cccc44ccc44444444cc44444c4444444444444cc4c4
4c44c4cc4444444444444c444ccc44c44444444444cc4cccc4cccc4cc44444444444c44cc444c4
4c4444444444cc4ccccccccc4cc4444444444c44c444444c44c444444444cc4ccccccccc4cc444
444444c44c4444444c44c4444444444cc4ccccccc4cc4444444444c44c44444444c44c44444444
4cc4ccccccc4cc444444444c44c444444444c44c4444444444cc4ccccc4cc4444444444c44c444
444444c44c44444444444cc44c44cc44444444444c44c4444cc44c44c44ccc44444444ccc4ccc4
4444444ccc44c44c44c4c4c4444cc444cc44444444ccc44444444cc444cc4444c4c4c44c444444
4444c44444444c44444444c4444444444c44c44c44c4444ccc444c444444444444444c444ccc44
44c44c444c444cccc444cc44c4444444444444c44cc444cccc444c444c444444444444c44c4444
4444444c44c444444444444c4444cc44444444444c4c44444444444c4c44444444444cc4444444
ccc44444444c44c444444444c44c44444444ccc4444400000000000000000000
01050000
00000000
}{\result{\pict\wmetafile8\picw1269\pich1269\picwgoal719\pichgoal719
010009000003f90200000200820200000000050000000b0200000000050000000c02f504f50425
000000f70000031000000000008000000000800000808000000000800080008000008080008080
8000c0c0c000ff00000000ff0000ffff00000000ff00ff00ff0000ffff00ffffff000400000034
02000003000000350082020000430f2000cc0000003000300000000000f504f504000000002800
00003000000030000000010004000000000080040000c40e0000c40e0000000000000000000000
00000000008000008000000080800080000000800080008080000080808000c0c0c0000000ff00
00ff000000ffff00ff000000ff00ff00ffff0000ffffff004444444c44444444c4c444444444c4
c44444444c444444444444ccc44444444c44c444444444c44c44444444ccc4444444cc44444444
444c4c44444444444c4c44444444444cc4444c444444444444c44c44444444444c44c444444444
444c444c444cccc444cc44c4444444444444c44cc444cccc444c444c44c4444ccc444c44444444
4444444c444ccc4444c44c44c44c4444444444c44444444c44444444c4444444444c44c4c4c444
4cc444cc44444444ccc44444444cc444cc4444c4c4cc4c44c44ccc44444444ccc4ccc44444444c
cc44c44c4cc44444c44c44444444444cc44c44cc44444444444c44c4444c4444c44c4444444444
cc4ccccc4cc4444444444c44c444444444c44c444444444cc4ccccccc4cc444444444c44c44444
444c44c4444444444cc4ccccccc4cc4444444444c44c4444444c44c444444444cc4ccccccccc4c
c444444444c44c444444c44c4444444444cc4ccccccccc4cc4444444444c44c444cc44c4444444
4444cc4cccc4cccc4cc44444444444c44cc4444c4444444444444cc4cc4c4cc4cc444444444444
4c444c4cc44444444ccc44cccc4c4c4c4cccc44ccc44444444cc44c44444444cccccccccc4cc4c
4cc4cccccccccc44444444c444444444ccc444cccc4cc4ccc4cc4cccc444ccc44444444c444444
4cc44ccc4444ccc4ccc4ccc4444ccc44cc44444444444444cc4cccccccccccc4ccc4cccccccccc
cc4cc4444444444444c4ccccccccccc44ccccc44ccccccccccc4c444444444444cc4cccccccc44
4ccccccccc444cccccccc4cc44444444444c4cccccccc4ccccccccccccccc4cccccccc4c444444
44444cc4cccccccc444ccccccccc444cccccccc4cc444444444444c4ccccccccccc44ccccc44cc
ccccccccc4c4444444444444cc4cccccccccccc4ccc4cccccccccccc4cc44444444444444cc44c
cc4444ccc4ccc4ccc4444ccc44cc4444444444444444ccc444cccc4cc4ccc4cc4cccc444ccc444
44444cc44444444cccccccccc4cc4c4cc4cccccccccc44444444c44cc44444444ccc44cccc4c4c
4c4cccc44ccc44444444cc44444c4444444444444cc4c44c44c4cc4444444444444c444ccc44c4
4444444444cc4cccc4cccc4cc44444444444c44cc444c44c4444444444cc4ccccccccc4cc44444
44444c44c444444c44c444444444cc4ccccccccc4cc444444444c44c4444444c44c4444444444c
c4ccccccc4cc4444444444c44c44444444c44c444444444cc4ccccccc4cc444444444c44c44444
4444c44c4444444444cc4ccccc4cc4444444444c44c444444444c44c44444444444cc44c44cc44
444444444c44c4444cc44c44c44ccc44444444ccc4ccc44444444ccc44c44c44c4c4c4444cc444
cc44444444ccc44444444cc444cc4444c4c4c44c4444444444c44444444c44444444c444444444
4c44c44c44c4444ccc444c444444444444444c444ccc4444c44c444c444cccc444cc44c4444444
444444c44cc444cccc444c444c444444444444c44c44444444444c44c444444444444c4444cc44
444444444c4c44444444444c4c44444444444cc4444444ccc44444444c44c444444444c44c4444
4444ccc444442d000000f700000314000000000080000000008000008080000000008000800080
0000808000c0c0c000c0dcc000a6caf000fffbf000a0a0a40080808000ff00000000ff0000ffff
00000000ff00ff00ff0000ffff00ffffff00040000003402010004000000f00100000300000000
00
}}}\par
}

La première partie en bleue semblerait représenter l'entête du fichier que j'arrive à bien récupérer. Ce qu'il me manque c'est la seconde partie en rouge. Logiquement cette partie devrait correspondre aux données de l'image mais là je ne sais pas comment je fais.

Merci d'avance pour vos réponses.

didinel
3
cs_Urgo Messages postés 780 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 16 avril 2009 1
18 août 2005 à 19:50
http://www.cppfrance.com/code.aspx?ID=32603

Cette source pourrait peut-être t'aider.


Ciao
Urgo
0
cs_BDel Messages postés 4 Date d'inscription vendredi 9 juillet 2004 Statut Membre Dernière intervention 1 octobre 2005
18 août 2005 à 23:09
Évidemment il faut que ce soit une image de 256 couleurs ou
moins pour qu’il y ait une table.




Si tu lis correctement les entêtes, la table est dedans.




Le Fichier BMP commence par la structure
BITMAPFILEHEADER.




La structure BITMAPINFO suit immédiatement.




Ces structures sont décrites dans <WinGdi.h>.




BITMAPINFO.bmiHeader.biClrUsed te donne le nombre de
couleur. Attention ce peut être 0 et dans ce cas c’est 256 pour du 8 bits, 16
pour du 4 etc. (1 << BITMAPINFO.bmiHeader.biBitcount).




Ensuite tu n’as qu’à utiliser
BITMAPINFO.bmiHeader.bmiColors[] pour retrouver tes couleurs (tableau de
RGBQUAD).




Les données de l’image suivent. Attention, elles sont
souvent compressées en RLE pour du 256 couleurs.
BITMAPINFO.bmiHeader.biCompression te l’indique.
0
Rejoignez-nous