IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Biblioth�ques Discussion :

Convertir une image BMP 8 bits en BMP 24 bits


Sujet :

Biblioth�ques

  1. #1
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    15
    D�tails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 15
    Par d�faut Convertir une image BMP 8 bits en BMP 24 bits
    Bonjour,

    Tout est dans le sujet

    Je dois convertir une image bitmal 8 bits en image bitmap 24 bit.
    Paint le fait tr�s bien, mais je veux le faire par le bon vieux c++ !

    Je n'ai rien vu � ce sujet sur ce forum dans les pr�c�dents post.

    Merci

  2. #2
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    8 bits niveaux de gris, ou 256 couleurs palletis�es ?

    Tu veux utiliser une biblioth�que (il y en a plus qu'il n'en faut) ou tout te taper � la main (ce qui me parait inutile, sauf pour un exo) ?

  3. #3
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    15
    D�tails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 15
    Par d�faut
    C'est du niveau de gris.

    L'utilisation d'une biblioth�que fera parfaitement l'affaire!

  4. #4
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Alors tu peux regarder du c�t� de DevIL (openil.sourceforge.net) par exemple.

    Peut-�tre m�me que tu peux t'en tirer avec des fonctions du GDI, je sais qu'elles g�rent les bitmaps mais je ne sais pas ce qu'il en est des conversions.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    F�vrier 2005
    Messages
    15
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 15
    Par d�faut
    Il y a une biblioth�que qui est pas mal elle permet de faire de la manipulation, convertion d'images...

    C'est Image magick : http://www.imagemagick.org/

    Tu trouve des binding vers divers langages : Perl, C, C++, Python, PHP, Ruby, Tcl/Tk ou Java

    et elle tourne sur pas mal d'architecture : Unix, Linux, Windows...

    Luther

  6. #6
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    15
    D�tails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 15
    Par d�faut
    Apr�s une recherche, les fonctions du GDI ne permetent pas de faire ce que je d�sire.

    Je vais voir Devil...

    Pour Image magick, j'ai t�l�charg� le source (24Mo), et voil�...
    A�e a�e a�e... J'ai regard�, j'ai vu en faisant des recherches de texte qu'on peut convertir certains formats, vers d'autres, mais passer de 8bits en 24 bits un meme bitmap, ce n'est pas flagrant (mais c'est peut etre possible avec �a je ne sais pas..).

  7. #7
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    15
    D�tails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 15
    Par d�faut
    Bonjour,

    Apr�s une recherche plus approfondie, GDI+ peut, peut-�tre m'aider.

    Seulement, mon Visual c++ n'a pas l'air de connaitre le gdiplus.h etc, je crois savoir que je dois mettre � jour ma platform SDK? Ou, que dois-je faire ? Pouvez vous m'indiquer des liens?

    J'ai pass� ma soir�e hier a rechercher une mise � jour de la platform SDK pour utiliser les fonctions du GDI+, mais je n'ai rien trouv�, mis a part pour Windows XP SP2, alors que je suis sous le SP1.

    merci

  8. #8
    Membre confirm� Avatar de harsh
    Inscrit en
    F�vrier 2005
    Messages
    229
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2005
    Messages : 229
    Par d�faut
    En meme temps, convertir une image BMP 8 bits en 24bits revient juste � la lire, remplacer tous les les index de ta LUT (table contenant les 256 valeurs de niveaux de gris. Se situe en dernier dans l'entete d'un fichier BMP), par la valeur correspondante (x3 pour coder les 3 composantes RGB suivi d'un unsigned char � 0 pour la composante alpha)....

    C'est tr�s simple et rapide � faire, tape "format" et "B?P" sur google; tu trouvera tout.

    Sinon y'a la lib OpenCv (dans highlib.h je pense) qui peut g�rer �a (meme si c'est utiliser une formule 1 pour aller au super march� )

  9. #9
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    15
    D�tails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 15
    Par d�faut
    C'est surement tr�s simple oui, j'ai l'id�e dans ma t�te, mais pas le code
    Je vais essayer de me pencher la dessus... mais j'ai deja fait moulte recherche sur google, (en cherchant du code) mais sans trop de succ�s!

  10. #10
    Membre confirm� Avatar de harsh
    Inscrit en
    F�vrier 2005
    Messages
    229
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2005
    Messages : 229
    Par d�faut
    Si tu veux utiliser opencv, il faut effectivement inclure highlib.h et utiliser la fonction cvConvertImage

    Si probleme pour le format BMP, fait signe

  11. #11
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    15
    D�tails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 15
    Par d�faut
    Alors, je suis parti sur tout autre chose..!
    Apr�s reflexion et �tude d'un BITMAP, j'en suis venu � �a (on va tenter d'�tre clair...) :

    Avec le bon vieux PAINT, j'ai ouvert mon bitmap 8 bits monochrome.
    Je l'ai converti en BMP 24 bits. J'ai ensuite colorier tout ce qui �tait blanc, en rouge (car je le rappel, mon but est de mettre en noir ce qui est en noir, et en rouge ce qui est en blanc). Apr�s avoir fait mon coloriage, j'ai re sauvegard� cette image en format 8 Bits. Et l�, la couleur rouge est rest�e.
    J'en suis donc venu � la conclusion suivante :

    Pas besoin de s'emb�ter � convertir une image en 24 bits pour la colorier. (si si..)

    Du coup, je me suis interess� toute cette matin�e � l'en-t�te des bitmap (� l'aide de l'editeur hexa de visual c++ et de documentations diverses). J'ai donc l'id�e suivante :
    Recopier toute l'en-tete avec la palette, de mon image 8 Bits colori�e en rouge, stocker tout les caract�re hexadecimal quelque part, et recopier toute cette en-t�te vers mon image 8 bits monochrome.
    Une fois donc l'en-t�te modif�e, je n'ai plus que remplacer partout o� il y a des FF par des E0 (ca les mettra en rouge, j'ai vu �a en ouvrant le bitmap 8bits couleur avec l'editeur hexa) et les 00 par des.. 00 ! Puisque je ne touche pas � la couleur noire.

    Donc mon soucis est maintenant d'�crire une en-t�te dans une autre en-t�te.. Je suis sur le code actuellement, et je commence � bloquer au niveau de l'�criture.

  12. #12
    Membre confirm� Avatar de harsh
    Inscrit en
    F�vrier 2005
    Messages
    229
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2005
    Messages : 229
    Par d�faut
    Si effectivement tu ne veut que mettre en rouge ce qui etait blanc (cod� 255 255 255), tu n'as rien d'autre � changer dans ton entete que la "case" de ton index de couleur correspondant a 255 255 255...

    Comme je te l'ai dit, sur google, en francais, tu trouveras ton bonheur sur les entetes BMP. Si tu te sert d'un editeur hexa decimal, tu as du comprendre que les octets etaient ecrit dans le sens : octet de poid le plu s faible vers l'octet de poid le plus fort. Ainsi, si la largeur de ton image est cod� sur 4octets (il me semble) o1 o2 o3 o4, le sens "logique" de lecture si tu devais l'ecrire en binaire sur une feuille serait o4 o3 o2 o1.

    Il te faut donc fonctionner qu'avec des variables de type unsigned char (puisque l'unit� est le byte (octet en francais, desole, je ne connait pas ton niveau)), et coder des fonction qui te permette de lire par des "mots" de 2 et 4 octets: pour lire un mot de 2octets, tu peux une concatenation (dans le bon sens sinon autant lire en une fois 2 octets) de 2 fread (en specifiant que tu ne lit qu'un octet dans tes parametres) par exemple.

    Bon, si vraiment tu bloques g peut etre un bout de code dans un coin, un peu fait � l'arrache, mais il doit y avoir les fonctions de base

  13. #13
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    15
    D�tails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 15
    Par d�faut
    Modfier la palette, d'accord.
    Mais qu'on soit d'accord sur la constitution d'un BMP :

    En tete du fichier -> 14 octets
    En tete du bitmap -> 40 octes
    Palette -> 4 octets
    Corps de l'image -> le reste ?

    En regardant avec mon editeur hexa, mon image 8 bits monochrome, je m'aper�ois que les 4 octets de la palette ont pour valeur :

    00 00 00 00
    Et quand je regarde les valeurs de ces memes octets dans le fichier 8 bit couleurs, ils ont la meme valeur.

    Donc en gros, je ne vois pas quel case je dois modifier !

    J'ai bien compris hier que les octets �taient dans ce sens la!

    Et, aussi, tu me parles de valeurs 255 255 255 pour le blanc, mais, c'est sur 8 bits, donc le blanc correspond a 255 tout court, hein? Malentendu ou j'ai rien compris?

    Je suis bien dans des variables unsigned char.

  14. #14
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    La palette fera bien plus que 4 octets, en th�orie pour du 8 bits paletis� elle aura 256 entr�es, correspondant chacunes � une couleur. T'as d� mal localiser la palette dans la structure des bmp.

  15. #15
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    15
    D�tails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 15
    Par d�faut
    Ha bah c'est d'un coup plus clair!
    J'ai lu que la palette �ait cod�e sur 4 octets

    -La composante bleue
    -La composante verte
    -La composante rouge
    -Un champ r�serv�

    Mais maintenant que tu me dis �a Loulou, je comprend mieux pourquoi mon image commence au 1079�me octets...

    14 octets pour la premi�re en-t�te
    40 octets pour la deuxi�me en-t�te
    256 pour la composante bleue
    256 pour la composante verte
    256 pour la composante rouge
    256 pour le champs �serv�

    Ca nous fait un total de 1078 octets !

    Donc je dois copier tous ces 1078 premiers octets pour mettre cette satan�e image monochrome en couleurs !
    Je ne dois pas modifierque quelques octets, si? Non hein, ou alors je vois pas les quels, car la palette monochrome est vachement diff�rente de la palette couleurs !

  16. #16
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    En niveaux de gris il n'y a normalement pas de palette, les 8 bits de chaque pixel sont son niveau de gris et non son entr�e dans la palette.

    Donc il faut transformer ton image niveau de gris en 8 bits palettis�, puis localiser l'entr�e correspondant au noir et la remplacer par du rouge.

  17. #17
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    15
    D�tails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 15
    Par d�faut
    Bon.... Bonne nouvelle pour Loulou et harsh :

    J'ai mon image en rouge et noir !

    Mettre mon code ici (un peu barbare mais comment� tout de meme) peut �tre utile ?

    Et sinon, je vous remercie tous les deux et un chapeau bas � Loulou (un de plus?) pour tout le taff que tu proccures et la disponibilit�

  18. #18
    mat.M
    Invit�(e)
    Par d�faut
    Avec les API standard de Windows il ya un moyen de red�finir la profondeur de pixels d'une image plut�t que de faire sa cuisine dans le fichier BMP
    Il suffit de red�finir le BITMAPINFOHEADER et sauvegarder l'image.
    Dans le MSDN il y a tout un coe source complexe certes qui indique comment sauvegarder une bmp.
    J'avais mis un lien dessus dans la FAQ de VC++

Discussions similaires

  1. convertir une image bmp de 24 bits en 8 bits
    Par nissame143 dans le forum Images
    R�ponses: 3
    Dernier message: 18/04/2009, 08h38
  2. Convertir une image Gif en Bmp
    Par alen dans le forum MFC
    R�ponses: 3
    Dernier message: 11/10/2005, 21h55
  3. Comment convertir une image en BMP ?
    Par blaiseac dans le forum Langage
    R�ponses: 6
    Dernier message: 30/07/2005, 18h24
  4. Comment convertir une image bmp en png??
    Par Leclair2000 dans le forum Langage
    R�ponses: 2
    Dernier message: 03/05/2005, 08h15
  5. [C#] Comment convertir une image bmp en jpg !!!
    Par vandeyy dans le forum Windows Forms
    R�ponses: 5
    Dernier message: 13/07/2004, 20h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo