Wenn's um Game-Engine geht: Hast du dir schon Andorra 2D angeschaut? Das ist eine
DirectX /
OpenGL Sprite Engine für Delphi.
Andernfalls: Für das was du machen willst, kannst du auch
StretchBlt verwenden.
Noch ein Wort zu ScanLine. Wenn man mit ScanLine zeichnen will, macht man das in der Regel nach dem Prinzip:
Delphi-Quellcode:
type
TRGB =
record
R, G, B: Byte;
end;
PRGB = ^TRGB;
var
Bmp: TBitmap;
x, y: Integer;
RGB: PRGB;
c: Byte;
begin
Randomize;
Bmp := TBitmap.Create;
try
Bmp.PixelFormat := pf24Bit;
Bmp.Width := 1000;
Bmp.Height := 100;
for y := 0
to Bmp.Height - 1
do
begin
RGB := Bmp.ScanLine[y];
for x := 0
to Bmp.Width - 1
do
begin
c := Round(255 / 100 * x / Bmp.Width * 100);
RGB^.r := c;
// Random(255);
RGB^.g := c;
// Random(255);
RGB^.b := c;
// Random(255);
Inc(
RGB);
end;
end;
Bmp.SaveToFile('
C:\Temp\Test.bmp');
finally
FreeAndNil(Bmp);
end;
end;
ScanLine liefert dir einen Zeiger zurück. Das dient aber nicht nur zum lesen. Sondern das heisst auch, dass alle Werte, die du in / an / auf dem Zeiger manipulierst, direkt wieder in diesen Speicherbereich zurückgeschrieben werden.
In diesem Fall sind es die
RGB-Werte für die Palette, die direkt wieder im Bitmap-Speicher landen.