Delphi-Quellcode:
SetLength(Ar, integer(bm.bmBits));
Ar := @bm.bmBits;
Wozu reservierst du Speicher bei dem Array, wenn du es dann einfach überschreibst bzw. die Adresse woanders hinzeigen lässt? Was soll das mit dem "Array of TRGBQuad" überhaupt?
bmBits gibt dir den Zeiger auf einen TRGBQuad zurück, sprich: bmBits ist eigentlich ein PRGBQuad. Alle nachfolgenden Pixel findest du dann nach dem diesem Pixel. Dazu (wurde schon beim PRect gesagt) einfach Inc() machen.
Also:
Delphi-Quellcode:
var
lPixel: PRGBQuad;
begin
lPixel := bm.bmBits;
lPixel^ => 1. Pixel
Inc(lPixel);
lPixel^ => 2. Pixel
etc