2012-04-17 18 views
8

Tengo algunos archivos de imagen almacenados en un archivo (algún tipo de archivo). Ese archivo tiene el siguiente aspecto:Transmisión de datos JPEG a TImage

enter image description here

Bueno, se divide en dos segmentos - encabezado y los datos del segmento. Encabezado (verde) contiene diversa información, como el nombre del álbum, ubicación, fecha/hora, descripción, número de fotos en el álbum, etc. Segmento de datos (azul & naranja) tiene estructura simple y contiene N x foto JPEG. Puedo extraer ese segmento de "imagedata" en el nuevo objeto TMemoryStream y ahora quiero mostrarlo usando TImage.

Puedo usar SaveAsFile método de TMemoryStream, establecer algún nombre de archivo temporal, cargar ese archivo de TImage y, más adelante, eliminar el archivo temporal. Eso funciona, pero me pregunto si hay alguna forma de enviar ese flujo a TImage sin utilizar temp. archivos.

Por supuesto, puedo escribir código para extraer todos esos archivos en el disco duro pero el problema es que tengo muchos archivos como este y solo quiero escribir aplicaciones para leer esos "álbumes" en lugar de tener más de 20,000 fotos en mi disco duro.

En resumen, todo lo que quiero es hacer siguiente procedimiento funciona (w/temp cabo utilizando. Archivos)

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

Gracias de antemano.

Respuesta

18

no estoy seguro si eso es lo que busca, pero este código se debe cargar el archivo JPEG de la corriente en el componente TImage dado:

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 nombres var poco diff, pero lo mismo que Estaba escribiendo, necesito aprender a escribir más rápido. – Dampsquid

+2

MI DIOS, incluso antes usaba TJPEGImage, ¡me extrañaba totalmente el método LoadFromStream !? Muchas gracias, eso es todo. – Wh1T3h4Ck5

+0

Me complace ayudar ;-) – TLama

Cuestiones relacionadas