这是c++的例子(随手写的,不保证能顺利编译),将RGB24转化为灰度值Y,然后R=G=B=Y,你可在将24位的灰度图转化为8位图
公式:Y=0.299*R+0.587*G+0.114*B
//----------得到RGB的灰度值(Y:0--255)-----------
byte GetYUV_Y(byte R,byte G,byte B)
{
byte result;
result=(byte)((R*299+G*587+B*114)/1000);
return result;
}
//----------------将24 RGB 调整为 24位灰度图-----------------//
void __fastcall AdjRGB2Y(Graphics::TBitmap *RgbBmp)
{
int x,y,i;
byte *SrcP,Y;
for(y=0;y<=RgbBmp->Height-1;y++)
{
SrcP=static_cast<byte *>(RgbBmp->ScanLine[y]);
for(x=0;x<=RgbBmp->Width-1;x++)
{
Y=GetYUV_Y(SrcP[3*x+2]+SrcP[3*x+1]+SrcP[3*x]);
SrcP[3*x]=Y;
SrcP[3*x+1]=Y;
SrcP[3*x+2]=Y;
}
}
}