Also, Windows bietet auch die GetDiBits-Funktion und hier wird darauf verwiesen, dass nur ein mehrfaches Scanline durchgeführt wird. Das gleiche kannst du natürlich auch mit einem TBitmap machen.
Dazu legst du einfach ein Array an, dass die Bilddaten aufnehmen kann ((Breite * Höhe) / 8) wobei du darauf achten musst, dass deine Breite und Höhe auch vielfache von 8 sind (wegen der Organisation in Bytes).
Nun kannst du über die Höhe der Bitmap iterieren, eine Zeile mittels Scanline in den Speicher laden und in dein Array kopieren, fertig.
Delphi-Quellcode:
var row : Integer;
bits : TByteDynArray;
buffer : PByteArray;
begin
// wegen 1 Bit / pixel
setLength(bits, (Bitmap.Height * Bitmap.Width) div 8);
for row := 0 to Bitmap.Height - 1 do
begin
buffer := Bitmap.Scanline[row];
CopyMemory(@bits[row * (Bitmap.Width div 8), buffer, (Bitmap.Width div 8)];
end; // for row := 0 to Bitmap.Height - 1
end;
Das sollte es schon sein.