Zitat von
Alex_ITA01:
Achso, aber so wie ich mir ScanLine angeguckt habe, ist es immer für eine Zeile.
Ich habe doch aber mehrere verschiedene Farben (Pixel) in einer Zeile. Wie geht das dann?
Du bekommst den Zeiger auf eine Zeile Pixeldaten. Die Pixeldaten sind dabei unterschiedlich aufgebaut, abhängig von dem eingestellten PixelFormat (siehe
TBitmap.PixelFormat). Bei pf32bit zeigt der Zeiger auf TBitmap.Width mal eine Struktur vom Typ TRGBQuad (also R, G, B + Reserved). Bei pf24bit auf TBitmap.Width mal eine Struktur vom Typ TRGBTriple, etc.
Es ist zu empfehlen, das PixelFormat auf pf32bit zu setzen und mit einem PRGBQuad zu arbeiten. Dies ist deutlich performanter.
Beispiel:
Delphi-Quellcode:
var
lPixel: PRGBQuad;
begin
Bmp := TBitmap.Create;
try
Bmp.Width := 1024;
Bmp.Height := 768;
Bmp.Pixelformat := pf32bit;
for i := 0 to Bmp.Height-1 do
begin
lPixel := Bmp.ScanLine[i]; // Zeiger auf die Zeile holen
for j := 0 to Bmp.Width-1 do
begin
// Pixel Farbwerte zuweisen.
lPixel.rgbRed := $ff;
lPixel.rgbGreen := $44;
lPixel.rgbBlue := $77;
Inc(lPixel); // auf zum nächsten Pixel
end;
end;
Bmp.SaveToFile('C:\Test.bmp');
finally
Bmp.Free;
end;
end;
/EDIT: roter Kasten? Hätte ich mir ja klemmen können...