Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Desarrollo en Delphi para Android
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-06-2017
oscjae oscjae is offline
Miembro
 
Registrado: may 2005
Posts: 70
Poder: 19
oscjae Va por buen camino
Lectura de TMemoryStream en componente FireMonkey

Buenas, no se si es el sitio correcto para exponer este problema, tengo una aplicación servidor conectada con una base de datos firebird, y luego tengo otra aplicación Android que muestra los datos de esa base de datos, hasta ahí todo bien, y cuando hago peticiones no hay problema, muestra listados con datos, combos, etc...

El problema esta cuando voy a mostrar una imagen, este es el sistema que sigo, la imagen la tengo en un campo BLOB, cuando la App pide esa imagen al servidor, el servidor la convierte en TMemoryStream, y la app lee ese TMemoryStream e intenta mostrarlo en un TImage de FireMonkey, con un LoadFromStream, y da error.

He supuesto que puede haber incompatibilidades, pero quería pasar por aquí por si hay alguna forma mejor de hacerlo, o si estoy cometiendo algún error.

Gracias, un saludo.
Responder Con Cita
  #2  
Antiguo 27-06-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por oscjae Ver Mensaje
... y da error.
¿Qué error?
¿Y qué código usas?
Responder Con Cita
  #3  
Antiguo 27-06-2017
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 545
Poder: 17
jhonalone Va por buen camino
Hola, oscjae.

¿Te acordaste de colocar el puntero al inicio del TMemoryStream?
Código Delphi [-]
MemoryStream.Position := 0;

Es muy fácil olvidarse.
Saludos.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10)
"...si no tengo caridad, nada soy..." (1 Cor 13,1-13)
Responder Con Cita
  #4  
Antiguo 27-06-2017
oscjae oscjae is offline
Miembro
 
Registrado: may 2005
Posts: 70
Poder: 19
oscjae Va por buen camino
Hola JhonAlone, si lo pongo.

Desde el servidor (VCL) estamos utilizando la tecnologia de las TMS XDATA, se hace una peticion a traves de un Thread desde el movil (FireMonkey), de un registro de una tabla donde uno de los campos es un BLOB con la imagen.
Una vez recibido el registro creo un MemoryStream con la imagen

Código Delphi [-]
fimg:=TMemoryStream.Create;
XData.TDCI_FICHERO.SaveToStream(fImg);
fimg.Position:=0;
ImgIni.Bitmap.LoadFromStream(fimg);

en la linea en la que cargo la imagen en el bitmap da error de memoria, que no podia acceder a la direccion de memoria.
Responder Con Cita
  #5  
Antiguo 27-06-2017
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 545
Poder: 17
jhonalone Va por buen camino
Hola oscjae.
Has probado así:
Código Delphi [-]
fimg:=TMemoryStream.Create;
XData.TDCI_FICHERO.SaveToStream(fImg);
fimg.Position:=0;
ImgIni.MultiResBitmap[0].Bitmap.LoadFromStream(fimg);

Y también ¿estás seguro que fimg no es nil?
Saludos.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10)
"...si no tengo caridad, nada soy..." (1 Cor 13,1-13)
Responder Con Cita
  #6  
Antiguo 28-06-2017
oscjae oscjae is offline
Miembro
 
Registrado: may 2005
Posts: 70
Poder: 19
oscjae Va por buen camino
He probado lo que has dicho jhonalone, y me sigue dando error "Falla la lectura del Bitmap"

Veo que el error está al intentar cargar la imagen con la clase TBitmap de firemonkey, porque el Stream llega bien.
Responder Con Cita
  #7  
Antiguo 02-07-2017
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 545
Poder: 17
jhonalone Va por buen camino
Hola oscjae.
Si la carga de la imagen está dentro del TThread, puedes intentarlo así:

Código Delphi [-]
fimg:=TMemoryStream.Create;
XData.TDCI_FICHERO.SaveToStream(fImg);
fimg.Position:=0;
 TThread.Synchronize(nil,
        procedure
        begin  
          Image1.MultiResBitmap[0].Bitmap.LoadFromStream(fImg);
        end
        );

Transcribe el error concreto que te lanza el programa. Y el momento exacto del código. Así nos haremos una idea más exacta de lo que pasa.
"Falla la lectura del Bitmap" no parece un error de FireMonkey en la App, sino un control que tú haces en tu propio código.

Cuéntanos.
Saludos.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10)
"...si no tengo caridad, nada soy..." (1 Cor 13,1-13)

Última edición por jhonalone fecha: 02-07-2017 a las 18:36:27. Razón: m
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿Dónde conseguir componentes para Firemonkey? ¿Cómo véis a Firemonkey? dec FireMonkey 27 08-10-2016 18:49:19
String To TMemoryStream Gimli OOP 8 03-03-2010 12:23:50
Pasar TMemorystream a string modulay OOP 4 29-09-2007 23:23:48
Tmemorystream y sockets LILYBEL Varios 3 01-07-2004 16:43:52
Problema con TMemoryStream Baixa Varios 6 20-01-2004 20:36:08


La franja horaria es GMT +2. Ahora son las 19:59:17.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi