Eigentlich wollte ich ja nix mehr dazu schreiben, aber es "nervt" halt doch ein wenig, wenn behauptet statt gemessen wird
.
Fünf Mal 1000 Bilder der Grösse 1000x1000 umgewandelt.
Die in #1 vorgestellte Lösung benötigt auf meinem nicht mehr allzu frischen Notebook im Schnitt 4950ms.
Meine in #7 benötigt 2011ms und diese hier (unten) 1373ms (wobei man das ganz sicher schöner und auch ein wenig schneller...)
Delphi-Quellcode:
procedure CreateSpecialImage2(const InBmp, OutBmp: TBitmap; Threshold: Byte);
var
StartPixel : Pointer;
OutPixel: PRgbTriple;
deltascan : NativeInt;
height, width, x, y: Integer;
begin
OutBmp.Assign(InBmp);
StartPixel := OutBmp.ScanLine[0];
deltascan := NativeInt(OutBmp.ScanLine[1]) - NativeInt(StartPixel);
Height := OutBmp.Height;
Width := OutBmp.Width;
for y := 0 to Height - 1 do
begin
OutPixel := StartPixel;
for x := 0 to Width - 1 do
begin
if OutPixel^.Blue > Threshold then OutPixel^.Blue := Threshold;
if OutPixel^.Red > Threshold then OutPixel^.Red := Threshold;
if OutPixel^.Green > Threshold then OutPixel^.Green := Threshold;
inc(OutPixel);
end;
inc(PByte(StartPixel), deltascan);
end;
end;