我注意到我的RGB888 24位到16位RGB565之间的转换程序导致颜色逐渐变暗,每次转换发生时......公式使用像这样的线性插值...RGB 24位到16位颜色转换 - 颜色变暗
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位的转换是相似的,但与反向插补......我不明白的价值观是如何保持越来越低,每次一颜色是循环的方程,如果他们是相反的......原来没有演员增加一倍,但我想如果我把它作为浮点除法它不会有衰退...但它仍然...
很酷......让我试试看......谢谢你的想法 – oldSkool 2010-11-09 06:27:33