I've been holding off commenting in the hope that somebody who knows more- i.e. something- about JPEG handling comes along, but feel that it's worth throwing in my 2d-worth at this point to keep the thread alive.
Since JPEG compression can be handled by an FPGA etc., I presume that it can be parallelized onto one or more background threads.
A background thread must not interact with the GUI in any way, but once an image had been built in memory I see no reason why it could not be handed off to some component of the GUI via TThread.Synchronize().
Usual comments about it being difficult to get this sort of thing right, but you can minimise the potential for problems by having as few points of contact between threads (including the main/foreground/GUI thread) as possible.
MarkMLl