2012-04-17 7 views
8

Ho alcuni file di immagine memorizzati in un unico file (una sorta di archivio). Il file è simile al seguente:Flusso di dati JPEG su TImage

enter image description here

Beh, è ​​separato in due segmenti - di intestazione e di dati del segmento. Intestazione (verde) contiene varie informazioni, come nome dell'album, posizione, data/ora, descrizione, numero di foto nell'album, ecc. Il segmento dati (blu & arancione) ha una struttura semplice e contiene N x foto JPEG. Posso estrarre quel segmento "imagedata" nel nuovo oggetto TMemoryStream e ora voglio mostrarlo usando TImage.

posso usare SaveAsFile metodo TMemoryStream, impostare qualche file-nome temporaneo, caricare il file da TImage, e più tardi, rimuovere file temporaneo. Funziona, ma mi chiedo se c'è un modo per inviare quel flusso in TImage senza usare temp. File.

Ovviamente, posso scrivere codice per estrarre tutti quei file sul disco rigido ma il problema è che ho molti archivi come questo e voglio solo scrivere un'applicazione per leggere quegli "album" invece di avere più di 20.000 foto sul mio disco fisso.

Insomma, tutto quello che voglio è quello di rendere seguente procedura funziona (w/out usando Temp. File)

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

Grazie in anticipo.

risposta

18

non sono sicuro se questo è quello che stai cercando, ma questo codice dovrebbe caricare il file JPEG dal flusso nel dato componente TImage:

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 nomi var leggermente diff, ma proprio la stessa Stavo scrivendo, ho bisogno di imparare a digitare più veloce. – Dampsquid

+2

MY GOD, anche io ho usato TJPEGImage prima, ho perso totalmente il metodo LoadFromStream !? Grazie mille, è tutto. – Wh1T3h4Ck5

+0

Felice di aiutare ;-) – TLama