[C / API32 ] Algorithme d'indexation des couleurs
Bonjour à tous,
( Je code en C++, et j'utilise l'API32 de Windows ).
Je suis en quête d'un algorithme d'indexation de couleurs, l'objectif de mon programme étant de créer des fichiers GIF en fonction de fichiers BMP.
Le principe d'indexation de couleurs permet de réduire la taille du fichier final, les pixels tirant leur couleur de la table d'indexation ( éventuellement placée dans l'en-tête du fichier ).
Pour que l'indexation soit de bonne qualité, on aura mis au point, en amont, un système faisant la moyenne des couleurs présentes dans le BMP ( comment on peut envisager la chose ? ) et les indexant ( mais là je suis perdu ! ).
---
Structure ( grossière ) d'un fichier GIF :
[ Informations sur l'image ( dimensions, etc. ) ]
[ Table d'indexation ( 256 couleurs codées sur 3 octets ) ]
[ Ensemble des pixels, tous codés sur 1 octet, celui-ci définissant la couleur à appeler dans la table ( valeur maximale d'un octet : 255 soit au maximum 256 appels ) ]
---
Mon rogramme traîte un fichier BMP d'où il tire les pixels de couleurs, mais tout devient autrement plus compliqué quand il s'agit d'indexer ces couleurs. A mon niveau, le procédé de compression est au point ( l'algo. LZW est utilisé ), ce qui me pose un réel soucis, c'est de mettre au point l'Algo. d'indexation.
Mes recherches sur le sujet ont abouti à des codes écrits en MFC, autant dire que je n'en ai absolument rien compris ( Est-ce que les MFC découlent vraiment du C ? ). Comme il s'agit pour moi de bien comprendre les choses, je ne veux absolument pas me servir de librairies prévues à cet effet ou autres fonctions préconçues dans ce but.
Alors à votre avis, quelle est la voie à suivre quant à l'élaboration d'un tel code ?
Un grand merci, et un bonjour de Tahiti (d'où je vis :) ) !
Re: [C / API32 ] Algorithme d'indexation des couleurs
Tout dépend de ce que tu as comme bitmap en entrée (24 bpp, 16 bpp, 8bpp ) ?
moi ce que je te conseille c'est de passer ta bitmap RGB (24 bpp) en BitField (16 bpp ou 15bpp).
Pour les bitmaps en 8bpp elles sont déjà indexées, il suffit de récupérer la palette.
pour passer en BitField regarde ce lien.
http://www.developpez.net/forums/vie...color&start=70
Le passage en BitField te permet d'économiser beaucoup de couleurs.
Ensuite tu parcours les pixels et tu vérifie si il existe dans la palette, sinon tu l'ajoute
Citation:
Envoyé par elf
...
Un grand merci, et un bonjour de Tahiti (d'où je vis :) ) !
il y'en as qui ont de la chance quand-même...
Re: [C / API32 ] Algorithme d'indexation des couleurs
Citation:
Envoyé par matazz
Tout dépend de ce que tu as comme bitmap en entrée (24 bpp, 16 bpp, 8bpp ) ?
C'est une info. que j'ai pas eu l'intelligence de préciser, je vais donc remédier à ça : je travaille sur des Bitmaps 24 bpp (donc non indexées).
Citation:
Envoyé par matazz
moi ce que je te conseille c'est de passer ta bitmap RGB (24 bpp) en BitField (16 bpp ou 15bpp).
Merci du conseil, c'est une notion que je vais étudier mais il s'agit ici d'encoder des fichiers GIF.
NB J'ai quand meme trouvé ta suggestion très intéressante.
Citation:
Envoyé par matazz
il y'en as qui ont de la chance quand-même...
Tôt ou tard il faut faire le grand saut 8)
Merci Matazz pour ta réponse.
Re: [C / API32 ] Algorithme d'indexation des couleurs
Citation:
Envoyé par elf
Citation:
Envoyé par matazz
moi ce que je te conseille c'est de passer ta bitmap RGB (24 bpp) en BitField (16 bpp ou 15bpp).
Merci du conseil, c'est une notion que je vais étudier mais il s'agit ici d'encoder des fichiers GIF.
...
Oui, mais le passage en BitField te permet de passer de 16777216 (256^3) de couelurs possibles à 32768 (15^3) couleurs sans vraiment modifier l'aspect. De plus ta palette pour ton gif est plus facile à créer car tu as écrété pas mal de couleurs.
Re: [C / API32 ] Algorithme d'indexation des couleurs
Citation:
Envoyé par matazz
Oui, mais le passage en BitField te permet de passer de 16777216 (256^3) de couelurs possibles à 32768 (15^3) couleurs sans vraiment modifier l'aspect. De plus ta palette pour ton gif est plus facile à créer car tu as écrété pas mal de couleurs.
Je crois que tu es dans le vrai, je vais suivre ton conseil.
( Est-ce que je pourrais éventuellement avoir une avant-première du résultat obtenu après application de cette méthode ? )
Je ne voudrais pas paraitre indélicat mais je pense qu'un système d'indexation peut encore être intéressant ( non ? ).
Re: [C / API32 ] Algorithme d'indexation des couleurs
Citation:
Envoyé par elf
...
( Est-ce que je pourrais éventuellement avoir une avant-première du résultat obtenu après application de cette méthode ? )
Tu veus deux image comparatives ?
Citation:
Envoyé par elf
...
Je ne voudrais pas paraitre indélicat mais je pense qu'un système d'indexation peut encore être intéressant ( non ? ).
Bien sur, c'est d'ailleurs pour ça que le gif l'utilise.
Il me semble cependant que tu n'as droit qu'a 256 couleurs pour une palette GIF (Je me trompe peut-être), donc le passage en Bitfield c'était juste un moyen de supprimer des couleurs...