Nochmals riesen DANK an euch.
Das mit dem virtuellen Bitmap werde ich morgen mal probieren, da ich heute leider keine Zeit mehr dazu habe.
Die Grauwerte erzeuge ich einfach, indem ich die drei Grundfarben alle in selben Verhältnis mische.
Also: Grauwert:= Wert + Wert*256 + Wert*256*256
Dann kann ich die Pixel so beschreiben:
canvas.Pixels[x,y]:=Grauwert
oder wie turboPascal es geschrieben hat mit:
canvas.Pixels[x, y] :=
RGB(wert, wert, wert);
(Danke für den Tipp, ich wusste das bis jetzt noch gar nicht, dass es auch so geht.)