J'ai remarqué que ma routine de conversion entre RGB888 24 bits et 16 bits RGB565 entraînait un assombrissement progressif des couleurs à chaque conversion ... La formule utilise une interpolation linéaire comme si ...RGB Conversion de couleurs de 24 à 16 bits - Les couleurs s'assombrissent
typedef struct _RGB24 RGB24;
struct _RGB24 {
BYTE B;
BYTE G;
BYTE R;
};
RGB24 *s; // source
WORD *d; // destination
WORD r;
WORD g;
WORD b;
// Code to convert from 24-bit to 16 bit
r = (WORD)((double)(s[x].r * 31)/255.0);
g = (WORD)((double)(s[x].g * 63)/255.0);
b = (WORD)((double)(s[x].b * 31)/255.0);
d[x] = (r << REDSHIFT) | (g << GREENSHIFT) | (b << BLUESHIFT);
// Code to convert from 16-bit to 24-bit
s[x].r = (BYTE)((double)(((d[x] & REDMASK) >> REDSHIFT) * 255)/31.0);
s[x].g = (BYTE)((double)(((d[x] & GREENMASK) >> GREENSHIFT) * 255)/63.0);
s[x].b = (BYTE)((double)(((d[x] & BLUEMASK) >> BLUESHIFT) * 255)/31.0);
La conversion de 16 bits à 24 bits est similaire, mais avec une interpolation inverse ... Je ne comprends pas comment les valeurs continuent en plus bas chaque fois qu'un la couleur est cyclée à travers l'équation si elles sont opposées ... A l'origine il n'y avait pas de distribution à doubler, mais je me suis dit que si je l'avais fait un point flottant, je n'aurais pas la retombée ...
Cool ... laissez-moi essayer ... merci pour l'idée – oldSkool