Sind GetPixel() und SetPixel() nicht am Ende das gleiche wie TCanvas.Pixels[]? Warum kopierst du nicht "ordentlich" mit BitBlt()? Und warum der Thread, der zudem auch noch auf einem nicht gelockten Canvas/
DC rumhantiert? (Deinen Code-Style finde ich persölich auch eher zum weglaufen, schwer zu lesen.)
Edit: Noch etwas: Du setzt die Progressbar im Thread für JEDEN Pixel neu. Das frisst UNMENGEN Zeit.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)