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

DirectX Discussion :

Modes de couleur 16-bits


Sujet :

DirectX

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19
    Points : 7
    Points
    7
    Par défaut Modes de couleur 16-bits
    Bonjour à tous,

    Je n'arrive pas à mettre la main sur une formule qui convertir une couleur
    RGB (24 bits) en une couleur au format 565 (16 bits). Cette macro :

    #define RGBto16(c) ((((c & 0xff) >> 3) << 11) | ((((c >> 8) & 0xff) >> 2) << 5) | (((c >> 16) & 0xff) >> 3))

    ne semble pas être la bonne. Pour faire les tests, j'ai créé une bitmap avec
    comme premier pixel la couleur (63,56,64). Puis je l'ai chargée sur ma
    surface Direct X en mode 16 bits. Curieusement, la couleur résultante
    n'est pas 147921 mais 14759.

    Est-ce que quelqu'un connaît la VRAIE formule de conversion ?

    En vous remerciant par avance,
    Mark

  2. #2
    Membre expérimenté

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Points : 1 679
    Points
    1 679
    Par défaut
    si tu es en xrgb8 (du bit le plus significant à celui le moins significant) et que tu convertis en r5g6b5 (idem pour les poids des bits)
    la formule est toute con:
    DWORD r = (xrgb >> 19) & 31;
    DWORD g = (xrgb >> 10) & 63;
    DWORD b = xrgb & 31;
    DWORD r5g6b5 = (r << 11) | (g << 5) | b;

    Il n'y a pas de formule toute faite, il faut que tu utilises
    ton cerveau en fonction de ce que tu sais de ton format de couleur
    (ça peut etre argb, abgr, rgb, avec des nombres de bits variables). Bref rien ne remplace un peu de reflexion. Si tu sais ce que font les opérateurs de décalages et les masques AND bien entendu.

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Salut Greg,

    Mais qui a fait la macro que j'ai présenté à ton avis ? ;-) Le problème
    n'est pas de comprendre les masques, il est que ces techniques ne
    semblent pas être celles qu'utilise DirectX pour convertir une bitmap
    888 en 565. Cela étant dit, ta formule est similaire à la mienne. Il
    faut juste noter que dans la macro RGB de Windows, le rouge est
    stocké dans l'octet le plus faible : BBBBBBBBGGGGGGGGRRRRRRRR.
    J'ai fait une bourde dans mon message, il faut lire 14792. Et c'est
    cette valeur que j'aimerais atteindre...

    A plus,
    Mark

  4. #4
    Membre expérimenté

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Points : 1 679
    Points
    1 679
    Par défaut
    Citation Envoyé par Mark53
    Il
    faut juste noter que dans la macro RGB de Windows, le rouge est
    stocké dans l'octet le plus faible : BBBBBBBBGGGGGGGGRRRRRRRR.
    oui mais où est la définition de ton probleme ?
    quel est le format d'origine ? placement des bits ? format de destination ?

    Chaque sous partie du systeme s'attend à voir des choses différentes que ce soit le codage dans un fichier (TGA, jpeg, big endian ou little endian etc..), le format des textures (abgr et argb coexistent) ou le format à passer au pixel shader (xyzw remplace les formats de couleur).

    Une fois que tu auras défini ces choses là, la solution en découlera d'elle meme.

    Par ailleurs d'où sort la valeur 14792 ? c'est une valeur que tu as calculé à la main et que tu aimerais retrouver dans ton programme ?

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Greg,

    J'ai expliqué précisément le problème dans le premier message, la
    valeur 14792 est celle que me retourne ma méthode de transformation
    de RGB à 16 bits (565). Mais quand j'affiche le résultalt de cette
    transformation par DirectX, j'obtiens 14759.

    Mais bon, ce n'est pas si grave, j'ai réalisé un fondu assez réussi.

    Allez, merci encore et à plus !
    Mark

Discussions similaires

  1. Lancer script en mode 32 et 64 bits
    Par snorky94 dans le forum VBScript
    Réponses: 2
    Dernier message: 22/02/2016, 18h48
  2. Mode WordWrap + Couleur d'un statusbar
    Par crassetph dans le forum Composants VCL
    Réponses: 3
    Dernier message: 03/12/2008, 14h17
  3. mode de couleur.?
    Par secondechance dans le forum Imagerie
    Réponses: 1
    Dernier message: 15/08/2008, 15h13
  4. Mode console, couleur dans le shell
    Par Mysti¢ dans le forum Général Python
    Réponses: 2
    Dernier message: 26/11/2007, 23h24
  5. [MFC] Utilisation d'image en couleur 32 bits
    Par vanitom dans le forum MFC
    Réponses: 1
    Dernier message: 03/08/2005, 11h13

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