Conversion RGB en 2 bytes
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

Conversion RGB en 2 bytes



  1. #1
    Overlord54

    Conversion RGB en 2 bytes


    ------

    Bonjour, à partir du code RGB (R,G,B), je prend par exemple un type de bleu dont le code est (66,134,244)
    Je souhaite le mettre en binaire 3 byte puis ensuite mettre le mot binaire en 2 byte de la forme suivante :

    R4R3R2R1R0G5G4G3G2G1G0B4B3B2B1B0

    Attention :
    La couleur rouge est codée sur 5 bits
    La couleur verte est codée sur 6 bits
    La couleur bleu est codée sur 5 bits

    Puis mettre le tout sous la forme MSB ; LSB :
    MSB : R4R3R2R1R0G5G4G3
    LSB : G2G1G0B4B3B2B1B0

    Merci d'avance

    -----

  2. #2
    PA5CAL

    Re : Conversion RGB en 2 bytes

    Bonjour

    En langage C, en partant des valeurs contenant 5, 6 et 5 bits :

    Code:
    MSB = (rouge<<3) | (vert>>3);
    LSB = ((vert&0x07)<<5) | bleu;
    Le bon nombre de bits peut être obtenu par décalage à droite (>>) de la valeur sur 8 bits. Mais d'autres solutions peuvent être envisagées si le maximum attendu n'est pas 255.
    Dernière modification par PA5CAL ; 22/12/2018 à 12h06.

  3. #3
    PA5CAL

    Re : Conversion RGB en 2 bytes

    ... ou si l'on souhaite procéder à une correction du gamma.

  4. #4
    PA5CAL

    Re : Conversion RGB en 2 bytes

    Sans correction de gamma et avec des valeurs de composantes RGB codées sur 3 × 8 bits, on peut faire directement :
    Code:
    MSB = (R & 0xF0) | (G >> 5);
    LSB = ((G & 0x1C) << 3) | (B >> 3);
    dans l'hypothèse où R, G et B sont de type entier sur 8 bits non signé (unsigned char ou uint8_t) ou de type entier de taille supérieure (int, etc.).

  5. A voir en vidéo sur Futura
  6. #5
    Fustigator

    Re : Conversion RGB en 2 bytes

    Citation Envoyé par Overlord54 Voir le message
    Bonjour, à partir du code RGB (R,G,B), je prend par exemple un type de bleu dont le code est (66,134,244)
    .....
    La couleur bleu est codée sur 5 bits
    L'exemple donné est incompatible avec la suite : 244, ça ne s'exprime pas sur 5 bits.

  7. #6
    polo974

    Re : Conversion RGB en 2 bytes

    Citation Envoyé par Fustigator Voir le message
    L'exemple donné est incompatible avec la suite : 244, ça ne s'exprime pas sur 5 bits.
    Personne n'a dit "sans perte d'information"...
    Jusqu'ici tout va bien...

  8. #7
    Fustigator

    Re : Conversion RGB en 2 bytes

    Citation Envoyé par polo974 Voir le message
    Personne n'a dit "sans perte d'information"...
    C'est exact, mais la réponse donnée en exemple par PA5CAL excluait a priori cette option.

  9. #8
    PA5CAL

    Re : Conversion RGB en 2 bytes

    Citation Envoyé par Fustigator Voir le message
    C'est exact, mais la réponse donnée en exemple par PA5CAL excluait a priori cette option.
    J'ai donné deux exemples :
    - l'un au post #2, sans perte, à partir des valeurs sur 5, 6 et 5 bits (en précisant déjà que ces valeurs pouvaient être obtenues par décalage des valeurs sur 8 bits)
    - l'autre au post #4, avec perte des bits de poids faible, à partir des valeurs sur 8 bits.

  10. #9
    polo974

    Re : Conversion RGB en 2 bytes

    Citation Envoyé par PA5CAL Voir le message
    Sans correction de gamma et avec des valeurs de composantes RGB codées sur 3 × 8 bits, on peut faire directement :
    Code:
    MSB = (R & 0xF0) | (G >> 5);
    LSB = ((G & 0x1C) << 3) | (B >> 3);
    dans l'hypothèse où R, G et B sont de type entier sur 8 bits non signé (unsigned char ou uint8_t) ou de type entier de taille supérieure (int, etc.).
    en fait, là, il n'y a que 4 bits pour le rouge. alors que c'est 5 possibles => modif du masque du rouge.
    Code:
    MSB = (R & 0xF8) | (G >> 5);
    LSB = ((G & 0x1C) << 3) | (B >> 3);
    et pas d'arrondi des valeurs, mais ça obligerait un min() ou un test préalable pour éviter un débordement...
    Jusqu'ici tout va bien...

  11. #10
    PA5CAL

    Re : Conversion RGB en 2 bytes

    Citation Envoyé par polo974 Voir le message
    en fait, là, il n'y a que 4 bits pour le rouge. alors que c'est 5 possibles => modif du masque du rouge.
    Oups. Bien vu. Au temps pour moi.

    Citation Envoyé par polo974 Voir le message
    et pas d'arrondi des valeurs, mais ça obligerait un min() ou un test préalable pour éviter un débordement...
    L'opportunité de pratiquer un arrondi est souvent discutable compte tenu du rapport entre le nombre d'opérations rajoutées et l'amélioration supposée du rendu (qui reste assez subjective).

    Pour régler le problème du débordement à la valeur max, on préfère généralement pratiquer d'emblée une somme avec saturation (que certains matériels proposent d'ailleurs comme opération de base), ce qui a pour effet de créer un très léger glissement de teinte (généralement imperceptible) sur les pixels présentant une composante saturée. Le calcul du min() suggère un traitement plus lourd, préalable et sur l'ensemble de l'image, pour un résultat pas toujours perceptible.

    Sinon, il existe des techniques qui tiennent compte de l'ensemble des pixels pour réduire le nombre de couleurs en privilégiant la qualité de l'image finale selon certains critères prioritaires (teinte, contraste lumineux, contraste coloré, limitation des artéfacts, ...), notamment en redéfinissant un nouvel espace de couleur, ou en tramant ou en bruitant l'image afin de diffuser les erreurs. Ces techniques sont plus ou moins gourmandes en ressources et en temps de calcul.
    Dernière modification par PA5CAL ; 28/12/2018 à 10h34.

  12. #11
    polo974

    Re : Conversion RGB en 2 bytes

    Je suis bien d'accord avec toi, PA5CAL, je ne m'encombrerai pas non plus de l'arrondi...
    Jusqu'ici tout va bien...

Discussions similaires

  1. manipulation de variables > 256 bytes en C18 sur PIC18
    Par Eki27 dans le forum Électronique
    Réponses: 2
    Dernier message: 03/05/2012, 15h55
  2. Conversion bytes en bits
    Par inviteb71155d9 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 3
    Dernier message: 24/01/2012, 11h06
  3. Réponses: 1
    Dernier message: 17/07/2010, 06h34
  4. temps d'émission de 5 bytes en zigbee
    Par invite74119562 dans le forum Électronique
    Réponses: 0
    Dernier message: 23/11/2009, 17h43