2012-04-17 16 views
8

Ich habe einige Bilddateien in einer Datei gespeichert (irgendeine Art von Archiv). Diese Datei sieht wie folgt aus:JPEG-Datenstrom zu TImage

enter image description here

Nun, es in zwei Segmente getrennt wird - Header und Daten-Segment. Header (grün) enthält verschiedene Informationen wie Albumname, Ort, Datum/Uhrzeit, Beschreibung, Anzahl der Fotos im Album usw. Datensegment (blau & orange) hat eine einfache Struktur und enthält N x JPEG-Foto. Ich kann dieses "imagedata" -Segment in ein neues TMemoryStream-Objekt extrahieren und möchte es jetzt mit TImage anzeigen.

Ich kann SaveAsFile Methode von TMemoryStream verwenden, einige temporäre Dateinamen festlegen, diese Datei von TImage laden und später temporäre Datei entfernen. Das funktioniert, aber ich frage mich, ob es irgendeinen Weg gibt, diesen Stream mit Temp in TImage zu senden. Dateien.

Natürlich kann ich Code schreiben, um alle diese Dateien auf Festplatte zu extrahieren, aber das Problem ist, dass ich viele Archive wie dieses habe und nur Anwendung schreiben möchte, um diese "Alben" zu lesen, anstatt 20.000 Fotos zu haben auf meiner Festplatte.

Kurz gesagt, alles, was ich will, ist folgendes Verfahren zu machen arbeitet (w/out Temp verwenden. Dateien)

procedure ShowImageFromStream(data: TStream; img: TImage); 
begin 
... 
end; 

Vielen Dank im Voraus.

Antwort

18

Ich bin mir nicht sicher, ob das, was Sie suchen, aber dieser Code sollte die JPEG-Datei aus dem Strom in die gegebenen TImage Komponente laden:

uses 
    JPEG; 

procedure ShowImageFromStream(AImage: TImage; AData: TStream); 
var 
    JPEGImage: TJPEGImage; 
begin 
    AData.Position := 0; 
    JPEGImage := TJPEGImage.Create; 
    try 
    JPEGImage.LoadFromStream(AData); 
    AImage.Picture.Assign(JPEGImage); 
    finally 
    JPEGImage.Free; 
    end; 
end; 
+1

+1 leicht diff var Namen aber genau das gleiche wie Ich tippte ein, ich musste schneller tippen lernen. – Dampsquid

+2

MEIN GOTT, sogar ich habe TJPEGImage vorher benutzt, ich habe die LoadFromStream-Methode total vermisst !? Vielen Dank, das war's. – Wh1T3h4Ck5

+0

Ich bin froh zu helfen ;-) – TLama