Es muss an etwas anderem liegen. Im übrigen würde ich statt canvas.pixels bitmap.scanline benutzen, weil diese schneller ist.
Dann musst du aber aufs Pixelformat achten!
edit: ich hab den code gerade mal getestet:
Bei mir scheint es zu funktionieren. außer einer Sache: SetLength(result,...) wird bei mir nicht akzeptiert (weil tbytearray eine festgelegte Größe hat). Aber er hält bei jedem schwarzen pixel an. Allerdings hat sich in result nix geändert... der fehler muss also woanders liegen...
achja:
Delphi-Quellcode:
bm.Canvas.Free;
except
bm.Canvas.Free;
ist ein bisschen komisch, und zwar in zweierlei hinsicht:
1. Gibst du das Canvas des Bitmaps frei und nicht das Bitmap
2. Hätte auch ein finally gereicht.