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

MFC Discussion :

[GDI][Bitmap]Conversion 24bits(TrueColor) en 16bits(HiColor)


Sujet :

MFC

  1. #1
    Membre chevronné
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Par défaut [GDI][Bitmap]Conversion 24bits(TrueColor) en 16bits(HiColor)
    Bonjour,
    Je voudrais coder une Bitmap 24 bits (8 pour le R, 8 pour le G et 8 pour le B) en une bitmap 16 bits (et 15) (5 pour le R, 5 (ou 6) pour le G et 5 pour B).
    Je me suis documenté un peut sur internet et j'ai compris que au lieu de coder de 0 à 255( 2^8 ) on code de 0 à 31 (2^5), donc on diminue la plage des couleurs.
    Donc en gros si j'ai un pixel (0xFF, 0x40, 0x40), en faisant un ratio entre 255/31 j'aurais (31, 5, 5). J'ai codé cette formule et j'ai assemblé les composantes dans 2 octets.
    Mais j'ai codé un Bitmap 24-bits en 16-bits avec photoshop et j'ai lu le même pixel dans le fichier est la valeur en hexa des 2 octets est différentes.
    La bitmap de photoshop s'ouvrant bien avec MsPaint, donc j'en déduis que mon simple ratio (255/31) ne suffit pas.

    Donc si qqun connait la formule exacte utilisée, je suis intéressé.

  2. #2
    Membre chevronné
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Par défaut
    bon ben pour ceux que ça intéresse :

    En fait il faut distinguer RGB555 (15 bits) et RGB565 (16 bits)

    En fait il s'agit pas de faire un ratio de 2^8 / 2^5, mais il s'agit d'enlever les 3 bits de poids faibles de la valeure de chaque composante :
    En gros 0xFF (1111 1111) , 0xFE (1111 1110), 0xFD(1111 1101)....jusqu'a 0xF8 auront pour valeur en codage 15 bits 0x1F (1111 1).

    Donc en fait il suffit de travailler avec des WORD pour chaque composante (R,G et B) et d'assembler le tout par décalage.
    Donc en gros par un masque 0xF8 (1111 1000) et un ET logique les 3 bits de poids faible sont enlevés, ensuite il faut faire un décalage à droite de 3 bits. Mais comme il faut redecaler à gauche pour assembler les composantes (10 pour le R(11 en 16 bits), 5 pour le G, et 0 pour le B) les valeurs du décalage sont 3 à droite pour le Bleu, 2 (3-5) à gauche pour le G et 7(3-7) à gauche pour le R.
    Enfin il faut faire un swap du byte de poid ford avec celui de poid faible (en tout cas sous windows et en mémoire, j'ai pas essayer d'écire un fichier) en fonction de mode d'écriture LittleEndian ou BigEndian...

    En gros :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    	WORD	B,G,R;
         //Application du masque pour retirer les 3 bits de poids faible
         //Dans le cas du 16 bits le masque pour le vert est 0xFC 
    	B = BuffBGR[Ind  ] & 0xF8;
    	G = BuffBGR[Ind+1] & 0xF8;
    	R = BuffBGR[Ind+2] & 0xF8;
     
        //application des décalages
    	B = (B>>3);
    	G = (G<<2);
    	R = (R<<7);
     
        //composition des valeurs
    	WORD BGR16Bit = (R + G + B);
     
        //Et swap entre le byte de poid fort et de poid faible.
    	BGR16Bit = (BGR16Bit << 8) + (BGR16Bit >> 8);

  3. #3
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    ça merite un petit post dans la faq ça non ?

  4. #4
    Membre chevronné
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Par défaut
    ouais, c'est ce que j'allais faire....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Bitmap Conversion From/To Rowids
    Par Rene_P dans le forum SQL
    Réponses: 3
    Dernier message: 23/02/2012, 15h21
  2. Réponses: 4
    Dernier message: 30/07/2009, 22h46
  3. gdi ,Bitmap, ajouter du texte
    Par freehair dans le forum MFC
    Réponses: 3
    Dernier message: 29/02/2008, 10h09
  4. GDI bitmap monochrome->couleur
    Par freehair dans le forum MFC
    Réponses: 10
    Dernier message: 25/02/2008, 17h02
  5. Insérer des BITMAP de 24bit dans une toolbar ?
    Par damien99 dans le forum MFC
    Réponses: 5
    Dernier message: 01/03/2006, 21h35

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