RGB 32 to 16 [Résolu]

Signaler
Messages postés
63
Date d'inscription
mercredi 9 février 2005
Statut
Membre
Dernière intervention
27 janvier 2009
-
Messages postés
63
Date d'inscription
mercredi 9 février 2005
Statut
Membre
Dernière intervention
27 janvier 2009
-
Bonjour,

Je cherche une fonction permettant de "bliter" une image RGB 32bpp en 16bpp.

Cordialement,

Pierre.

____________________________________________
Aprés l'effort, le reconfort... http://ip2x.free.fr/tracks/part3

2 réponses

Messages postés
63
Date d'inscription
mercredi 9 février 2005
Statut
Membre
Dernière intervention
27 janvier 2009

Merci mais c'est en fait l'inverse que je dois faire : RGB888 -> RGB565.

J'avais une image 32bits à afficher dans un DC 16bits.

La fonction ::CopyImage(HBITMAP(32Bits),...,...,...) avec comme parametre optionnel LR_CREATEDIBSECTION à manifestement permis de résoudre ce problème...

Merci rt15 pour ta réponse !
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
Salut,


RGB565 -> RGB888 ?


Un RGB565 contient moins d'informations qu'un RGB888, donc il va falloire "inventer" des informations. Il semble qu'il y ai deux méthodes
: recopier les bits de poids fort dans les bits de poid faible, ou
faire un classique produit en croix. La première méthode est moins
précise mais plus rapide que la seconde.



R8 = (R5 << 3) | (R5 >> 2);


R8 = (R5 * 255) / 31;


Ca doit être quelque chose comme ça (Non testé, types Windows) :

COLOR16 rgb565;
RGBTRIPLE rgb888;
BYTE R5, G6, B5;

R5 = rgb565 & 1F;
G6 = (rgb565 >> 5) & 3F;
B5 = (rgb565 >> 11) & 1F;

rgb888.rgbtRed = (R5 << 3) | (R5 >> 2);
rgb888.rgbtGreen = (G6 << 2) | (G6 >> 4);
rgb888.rgbtBlue = (B5 << 3) | (B5 >> 2);