P1 ist die Scanline aus der ersten Zeile des Bildes
P1:=Image1.Picture.Bitmap.ScanLine[n];
P2:=Image1.Picture.Bitmap.ScanLine[n+1];
P2 ist die nächste zeile um dann diese beiden zeilen zu verglecihen
Das habe ich nicht gefragt - es fehlt die Deklaration von P1 und P2. Oder in anderen Worten: von welchem Typ sind die?
Wenn es nämlich Pointer sind, wie ScanLine vermuten lässt, dann würde ein Array-Zugriff á la P1[x] vom Compiler zu Recht angemeckert.