Ja. Das LoadFrom* lädt noch nicht das komplette Bild sondern holt sich erst einmal die Informationen über das Bild. Die Methode DIBNeeded konvertiert die Bilddaten in ein DIB. Das passiert beim Zuweisen zu einem TBitmap.
Du solltest beim Laden des JPEGs auch folgendes aktivieren. Das reduziert die Zeit schon mal beträchtlich.
JPEG.Performance := jpBestSpeed;
Wenn du deine Bilder nicht in dieser monströsen Auflösung benötigst kannst du auch nach LoadFrom* schauen wie groß ist das Bild und entsprechend vor dem Assign die Eigenschaft Scale setzen. Dadurch kannst du ein Bild vollautoamtisch in der halben Größe laden lassen. Da es nicht nachträglich runtergerechnet wird sondern schon so geladen wird sparrt das massiv Zeit. Gibt noch die Möglichkeit 1/4 oder auch 1/8tel einzustellen.
Und ansonsten habe ich vor ein paar Tagen auch meine Umsetzung von dem Header der libjpeg zum Laufen bekommen. Diese Bibliothek dient auch als Grundlage für die Delphiimplementation und noch mal etwas schneller als diese. Ein 1280x1024 JPEG kann ich mit ihr in ~61ms in voller Auflösung laden. Die Implementation von Delphi benötigt da noch ~86ms. Ohne Performance ist das Verhältniss ~80 ms zu ~220ms. Mit der Bibliothek könnte man sich aber auch das Zuweisen zu einem TBitmap sparen, da man die Bibliothek die Scanlines reinreicht in der sie ihre Bilddaten ablegen soll.
Allerdings erhöht sich dadurch der Programmaufwand ziemlich und ich kann nicht mit Gewissheit sagen, dass die Umsetzung des Headers so 100%tig funktioniert. Bei Bedarf kann ich aber heute abend mal die Bibliothek + Sample hochladen. Wollte ich zwar sowieso irgendwann veröffentlichen aber eigentlich noch nicht so überstürzt.