Bei aller Freude, da sind noch reichlich Fehler drin...
Delphi-Quellcode:
pf1bit: Laenge := Ceil(SearchBMP.Width / 8);
pf4bit: Laenge := Ceil(SearchBMP.Width / 2);
CompareMem vergleicht nur ganze Byte, wenn dein gesuchtes Bild mitten in einem Byte anfängt oder nicht nur ganze Byte belegt, wirst du es so nicht finden.
Delphi-Quellcode:
pf15bit: Laenge := Ceil(SearchBMP.Width * 15 / 8);
...
Diese Pixelformat belegt für jedes Pixel 2 Byte, das restliche Bit wird nicht genutzt.
Delphi-Quellcode:
for y := 0 to ScreenBMP.Height - 1 do
for x := 0 to ScreenBMP.Width - 1 do
Hier muss die Breite/Höhe des SearchBMP abgezogen werden, sonst greift CompareMem auf Speicher zu, der nicht mehr zu der Bitmap gehört.
Delphi-Quellcode:
CompareMem(SearchP,@ScreenP[x],Laenge)
...
ScreenP ist vom Type TRGBTripleArray, bei anderen Pixelformaten als pf24Bit wird auf die falsche Adresse zugegriffen.