RGB888 24ビットから16ビットRGB565に変換するルーチンの結果、変換が行われるたびに色が徐々に暗くなることに気付きました...式は次のように線形補間を使用します...
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);
16ビットから24ビットへの変換は似ていますが、逆補間を使用します...逆の場合、色が方程式を循環するたびに値がどんどん低くなっていく方法がわかりません...元々はそこにありますダブルへのキャストはありませんでしたが、浮動小数点除算を行うとフォールオフが発生しないと考えました...しかし、それでも...