65,211
社区成员
发帖
与我相关
我的任务
分享
struct grey_table
{
grey_table()
{
for(unsigned int i = 0; i < 0xFF; ++i)
{
red[i] = (static_cast<unsigned>(0.3 * i) << 16);
green[i] = (static_cast<unsigned>(0.59 * i) << 8);
blue[i] = static_cast<unsigned>(0.11 * i);
}
}
unsigned int red[0xFF];
unsigned int green[0xFF];
unsigned int blue[0xFF];
};
unsigned int ToGrey(unsigned int rgb)
{
static grey_table gt;
return gt.red[(rgb >> 16)] + gt.green[(rgb >> 8) & 0xFF] + gt.blue[rgb & 0xFF];
}
unsigned int ToGrey( unsigned int RGB )
{
unsigned char *puc = ((unsigned char *)&RGB);
unsigned char red, green, blue;
blue = *puc;
green = *( ++puc );
red = *( ++puc );
unsigned int grey = 0.3 * red + 0.59 * green + 0.11 * blue;
return grey;
}