RGB888 à RGB565 / Décalage de Bits

Je veux combiner les trois personnages dans un court en utilisant le décalage de bits. C'est pour la mise en œuvre de la RGB565 palette de couleurs (où il y a 5 bits pour le rouge, 6 pour le vert, 5 pour le bleu).

Voici mon exemple de programme, je suis juste en manque une étape dans le milieu, je pense que là où j'ai besoin de faire quelques anding.

#include <stdio.h>

int main( ){
        unsigned char r, g, b;
        unsigned short rgb;

        r = 255;        //0xFF 1111 1111
        g = 100;        //0x64 0110 0100
        b = 50;         //0x32 0011 0010

        r = r >> 3;     //0x31 0001 1111
        g = g >> 2;     //0x19 0001 1001
        b = b >> 3;     //0x06 0000 0110

        //r = r & something; //
        //g = g & something; //
        //b = b & something; //

        //Desired result:
        //         R      G     B
        //0xFB26 11111 011001 00110
        rgb = r | g | b;

        printf( "r 0x%x g 0x%x b 0x%x, rgb 0x%08x\n", r, g, b, rgb );
}

Vous pouvez voir mon résultat souhaité à la fin. Merci pour l'aide!

OriginalL'auteur conor | 2012-07-13