Scanline gibt ja die Farbe zurück
Ich muss sie aber zuweisen
Du kannst beides damit machen:
Delphi-Quellcode:
var
B: TBitmap;
X, Y: Integer;
P: PByte;
begin
B := TBitmap.Create;
try
B.PixelFormat := pf24Bit;
B.Width := 200;
B.Height := 200;
for Y := 0 to B.Height - 1 do
begin
P := B.ScanLine[Y];
for X := 0 to B.Width - 1 do
begin
P^ := 0; Inc(P);
P^ := 255; Inc(P);
P^ := 0; Inc(P);
end;
end;
Canvas.Draw(0, 0, B);
finally
B.Free;
end;
end;
Das füllt dein Bitmap in der Farbe rot.
Statt mit
PByte
zu arbeiten, kannst du auch
PDWord
verwenden (der Speicher sollte eh aligned sein, weshalb du auch beim letzten Pixel mit dem
pf24Bit
Format kein invalid-read bekommen solltest) und dann die einzelnen Farbwerte per Bitshifts reinpacken:
Delphi-Quellcode:
var
B: TBitmap;
X, Y: Integer;
P: PDWord;
begin
B := TBitmap.Create;
try
B.PixelFormat := pf24Bit;
B.Width := 200;
B.Height := 200;
for Y := 0 to B.Height - 1 do
begin
P := B.ScanLine[Y];
for X := 0 to B.Width - 1 do
begin
P^ := (0 shl 8) or (255 shl 16) or (0 shl 24);
P := PDWord(PByte(P) + 3); // 3 byte per pixel for pf24Bit
end;
end;
Canvas.Draw(0, 0, B);
finally
B.Free;
end;
end;