void ColorDif(Bitmap* pdifImage,Bitmap* psourceBitmap,int flag,ColorPalette* pal)
{
//flag 为0,1,2时分别为蓝色,黄色,白色
float Dif;//色彩差异
int i,j;
float k=0.5;//下面两种颜色的参数
int height=pdifImage->GetHeight();
int width=pdifImage->GetWidth();
byte r,g,b; BitmapData bmpDifData;
Rect rect(0,0,width,height);
pdifImage->LockBits(rect,ImageLockModeWrite,PixelFormat8bppIndexed,&bmpDifData);
BitmapData bmpData;
psourceBitmap->LockBits(rect,ImageLockModeRead,PixelFormat24bppRGB,&bmpData); byte * ptr=(byte *)bmpData.Scan0;
byte * qtr=(byte *)bmpDifData.Scan0; for(i=0; i<height; i++)
{
for(j=0; j<width; j++)
{
b=*ptr;
g=*(ptr+1);
r=*(ptr+2); switch(flag)
{
case 0:
Dif=(float)(b*2-r-g);//蓝色
break;
case 1:
Dif=(float)(r+g-2*b-k*abs(r-g));//黄色
break;
case 2:
Dif=(float)(r+b+g-k*(abs(r-g)+abs(r-b)+abs(b-g)));//白色*/
break;
} if (Dif > 255)
Dif=255;
if (Dif < 0)
Dif=0;
*qtr=Dif;
ptr+=3;
qtr+=1;
}
ptr+=bmpData.Stride-bmpData.Width*3;
qtr+=bmpDifData.Stride-bmpDifData.Width;
}
pdifImage->UnlockBits(&bmpDifData);
psourceBitmap->UnlockBits(&bmpData);  
pdifImage->SetPalette(pal);
}