RGB 32 to 16

Résolu
cs_ip2x Messages postés 63 Date d'inscription mercredi 9 février 2005 Statut Membre Dernière intervention 27 janvier 2009 - 5 janv. 2008 à 13:47
cs_ip2x Messages postés 63 Date d'inscription mercredi 9 février 2005 Statut Membre Dernière intervention 27 janvier 2009 - 8 janv. 2008 à 13:11
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

cs_ip2x Messages postés 63 Date d'inscription mercredi 9 février 2005 Statut Membre Dernière intervention 27 janvier 2009
8 janv. 2008 à 13:11
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 !
3
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
7 janv. 2008 à 22:42
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);
0
Rejoignez-nous