Dein Code ist viel zu kompliziert und dadurch auch langsam.
So könntest du es für 24Bit tun. Und für die anderen Formate natürlich ähnlich.
Delphi-Quellcode:
procedure CreateSpecialImage(const InBmp, OutBmp: TBitmap; Threshold: Byte);
var
OutPixel: PRgbTriple;
height, width, x, y: Integer;
begin
OutBmp.Assign(InBmp);
Height := OutBmp.Height;
Width := OutBmp.Width;
for y := 0 to Height - 1 do
begin
OutPixel := OutBmp.ScanLine[y];
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;
end;
end;