Yo lo que he utilizado es GetPixel y SetPixel...
Cómo funciona?
Hace dos años que la utilicé
No recuerdo el tipo de dato (color1,color2)...
WORD Color1 =GetPixel(bitmap1->Handle, PosHorizontal, PosVertical);
int Rojo1 = GetRValue(MiColor);
int Verde1 = GetGValue(MiColor);
int Azul1 = GetBValue(MiColor);
WORD Color2=GetPixel(bitmap2->Handle, PosHorizontal, PosVertical);
int Rojo2 = GetRValue(MiColor);
int Verde2 = GetGValue(MiColor);
int Azul2 = GetBValue(MiColor);
int Gris1 = (Rojo1+Verde1+Azul1)/3;
int Gris2 = (Rojo2+Verde2+Azul2)/3;
int Resta = abs(Gris1-Gris2);
Este método es un poco largo pero al final tienes la información partida en pedacitos...
Quisiera que me mostraras como utilizas ScanLine.... ya que cuando yo comencé tenía ese mismo problema y al utilizar GetPixel y SetPixel ... no me interesé en aprender...