Ich wollte von der ineffektiven "Pixels"-Variante auf die "Scanline"-Variante umsteigen.
An sich auch ganz gut soweit:
Delphi-Quellcode:
// Bitmap einfärben
// Scanline-Methode
for y := 0 to AHeight - 1 do
begin
pix := iMap.Picture.Bitmap.ScanLine[y];
for x := 0 to AWidth - 1 do
begin
if map[x][y] <= 0 then // Wasser
begin
i := Trunc(map[x][y] / Mi * 100);
pix^.rgbtBlue := 255 - i * 2;
pix^.rgbtGreen := 51;
pix^.rgbtRed := 51;
end else // Land
begin
i := Trunc(map[x][y] * 160 / Ma);
pix^.rgbtBlue := 32 + (i div 4);
pix^.rgbtGreen := 240 - i;
pix^.rgbtRed := 32 + (i div 4);
end;
inc(pix);
end;
end;
// Pixels-Methode
{
WITH iMap.Picture.Bitmap.Canvas DO
FOR y := AHeight - 1 DOWNTO 0 DO
FOR x := AWidth - 1 downto 0 DO
begin
IF map[x, y] <= 0 then
begin
i := Trunc(map[x, y] / Mi * 100);
Pixels[x, y] := $00FF3333 - $00020000 * i;
end else begin
i := Trunc(map[x, y] * 160 / Ma);
Pixels[x, y] := $0020F020 + $00010001 * (i div 4) - $00000100 * i;
end;
end;
}
(Hinweise: 1. Das Bitmap hat ein 24 Bit Format und 2. ist pix vom Typ PRGB
Triple)
Soweit so gut... er kompliert auch ohne zu murren.
Aber einmal geht es gut, aber ein zweites mal nicht... (also er zeichnet einfach nicht neu)
PS: "pix" is lokal deklariert.
[edit]Rechtschreibfehler im Topic behoben[/edit]