Asunto: Mostrar una imagen en un TImage desde un TMemoryStream
Tengo una aplicación Delphi donde un procedimiento obtiene una imagen en un TMemoryStream, quiero mostrarla directamente en un TImage pero no sé cómo hacerlo. Sólo lo he conseguido guardándola previamente a fichero, pero esto es muy "chapucero" pues, una vez mostrada en el TImage, tengo que eliminar el fichero. El código es algo así:
Pero lógicamente, extraer una imagen a fichero para luego mostrarla y eliminar el fichero no es el método idóneo ¿hay alguna forma de mostrar la imagen del TMemoryStream directamente en el TImage sin guardarla en fichero?
Publicado:
Dom Oct 31, 2010 8:17 am
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Mostrar una imagen en un TImage desde un TMemoryStream
Anuncios
varios escribió:
Tengo una aplicación Delphi donde un procedimiento obtiene una imagen en un TMemoryStream, quiero mostrarla directamente en un TImage pero no sé cómo hacerlo. Sólo lo he conseguido guardándola previamente a fichero, pero esto es muy "chapucero" pues, una vez mostrada en el TImage, tengo que eliminar el fichero. El código es algo así:
Pero lógicamente, extraer una imagen a fichero para luego mostrarla y eliminar el fichero no es el método idóneo ¿hay alguna forma de mostrar la imagen del TMemoryStream directamente en el TImage sin guardarla en fichero?
Sí es posible, para mostrar una imagen de un MemoryStream en un TImage directamente en Borland Delphi, puedes usar este código de ejemplo:
Código:
var
imagenMemory : TMemoryStream;
jpg : TJPEGImage;
begin
//código que cargará la imagen en el TMemoryStream
......
//creamos el TJPEGImage
jpg := TJPEGImage.Create;
//asignamos el MemoryStream al JPEGImage
jpg.LoadFromStream(imagenMemory);
//asignamos el JPEGImage al TImage para mostrarla en pantalla
imagenPantalla.Picture.Assign(jpg);
imagenPantalla.Refresh;
.....
end;
Publicado:
Dom Oct 31, 2010 8:23 am
varios Magnífico usuario
Registrado: Oct 10, 2006 Mensajes: 2092
Asunto: Re: Mostrar una imagen en un TImage desde un TMemoryStream
Anuncios
alonsojpd escribió:
Sí es posible, para mostrar una imagen de un MemoryStream en un TImage directamente en Borland Delphi, puedes usar este código de ejemplo:
Código:
var
imagenMemory : TMemoryStream;
jpg : TJPEGImage;
begin
//código que cargará la imagen en el TMemoryStream
......
//creamos el TJPEGImage
jpg := TJPEGImage.Create;
//asignamos el MemoryStream al JPEGImage
jpg.LoadFromStream(imagenMemory);
//asignamos el JPEGImage al TImage para mostrarla en pantalla
imagenPantalla.Picture.Assign(jpg);
imagenPantalla.Refresh;
.....
end;
Lo he intentado pero me da este error:
---------------------------
Debugger Exception Notification
---------------------------
Project modImg.exe raised exception class EJPEG with message 'JPEG error #41'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
¿Qué puede faltar o qué estoy haciendo mal? he puesto el código tal como me lo has pasado.
Publicado:
Dom Oct 31, 2010 8:27 am
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Mostrar una imagen en un TImage desde un TMemoryStream
Anuncios
varios escribió:
Lo he intentado pero me da este error:
---------------------------
Debugger Exception Notification
---------------------------
Project modImg.exe raised exception class EJPEG with message 'JPEG error #41'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
¿Qué puede faltar o qué estoy haciendo mal? he puesto el código tal como me lo has pasado.
No, no estás haciendo nada mal, el problema es que nos ha faltado una línea de código, te quedaría así:
Código:
var
imagenMemory : TMemoryStream;
jpg : TJPEGImage;
begin
//código que cargará la imagen en el TMemoryStream
......
imagenMemory.Seek(0, soFromBeginning);
//creamos el TJPEGImage
jpg := TJPEGImage.Create;
//asignamos el MemoryStream al JPEGImage
jpg.LoadFromStream(imagenMemory);
//asignamos el JPEGImage al TImage
imagenPantalla.Picture.Assign(jpg);
imagenPantalla.Refresh;
Puede publicar nuevos temas en este foro No puede responder a temas en este foro No puede editar sus mensajes en este foro No puede borrar sus mensajes en este foro No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A