Graphics::TBitmap *pb = Image1->Picture->Bitmap; int img_H = pb->Height; int img_W= pb->Width; Graphics::TBitmap *pc = new Graphics::TBitmap; pc->PixelFormat = pf24bit; pc->Width = img_W; pc->Height = img_H; //stage - 0 int *pnewImg = new int[(img_W + MIXNUM)*(img_H + MIXNUM)]; MIXPOINT *pPoint = new MIXPOIN[img_W*img_H]; //stage - 1 prepare the Difference table int *pMask = new int[(img_W-1)*(img_H-1)]; int i, j; Byte *pt0, *ptr, *ptr2; pt0 = (Byte *)pb->ScanLine[0]; for(i = 0; i < img_H - 1; i++){ ptr = (Byte *)pb->ScanLine[i + 1]; ptr2 = (Byte *)pc->ScanLine[i]; for(j = 0; j < img_W - 1; j++){ int distance = 0; for(int j_1 = 0; j_1 < 3; j_1++){ distance += ( pt0[3*j + j_1] >= ptr[3*j + 3 + j_1] ? pt0[3*j + j_1] - ptr[3*j + 3 + j_1] : ptr[3*j + 3 + j_1] - pt0[3*j + j_1] ); } pMask[i*img_W - i + j] = distance; } pt0 = ptr; }