Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Desarrollo en Delphi para Android (https://www.clubdelphi.com/foros/forumdisplay.php?f=57)
-   -   Lectura de TMemoryStream en componente FireMonkey (https://www.clubdelphi.com/foros/showthread.php?t=92014)

oscjae 27-06-2017 16:05:28

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.

Casimiro Notevi 27-06-2017 16:33:13

Cita:

Empezado por oscjae (Mensaje 518787)
... y da error.

¿Qué error?
¿Y qué código usas?

jhonalone 27-06-2017 18:42:14

Hola, oscjae.

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

Es muy fácil olvidarse.
Saludos.

oscjae 27-06-2017 19:06:58

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.

jhonalone 27-06-2017 19:43:30

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.

oscjae 28-06-2017 16:17:08

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.

jhonalone 02-07-2017 17:26:11

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.


La franja horaria es GMT +2. Ahora son las 15:21:39.

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