Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
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 23-10-2020
darkamerico darkamerico is offline
Miembro
 
Registrado: dic 2010
Posts: 225
Poder: 14
darkamerico Va por buen camino
Question Cargar una Imagen base64 en un Timage

Saludos amigos, estoy realizando una consulta al Web Service que se muestra en la siguiente imagen: https://ibb.co/2t1Bch7

En particular me interesa poner mostrar el campo foto en un componente TImage.

Estoy intentando leerlo pero no se como tratar el tipo de llegada, obsérvese la imagen del error: https://ibb.co/r0QgmqZ

Agradezco cualquier ayuda en este sentido

Abrazo
Américo Torres
Responder Con Cita
  #2  
Antiguo 23-10-2020
darkamerico darkamerico is offline
Miembro
 
Registrado: dic 2010
Posts: 225
Poder: 14
darkamerico Va por buen camino
Question dato adicional

Cita:
Empezado por darkamerico Ver Mensaje
Saludos amigos, estoy realizando una consulta al Web Service que se muestra en la siguiente imagen: https://ibb.co/2t1Bch7

En particular me interesa poner mostrar el campo foto en un componente TImage.

Estoy intentando leerlo pero no se como tratar el tipo de llegada, obsérvese la imagen del error: https://ibb.co/r0QgmqZ

Agradezco cualquier ayuda en este sentido

Abrazo
Américo Torres
Si desean acceder al Web Service es este: http://181.176.170.150:555/ConsultaRUCDNI.svc
Responder Con Cita
  #3  
Antiguo 23-10-2020
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.232
Poder: 20
ElKurgan Va camino a la fama
Hola.

Creo que el problema te lo da la asignación de la foto.

En el Web Service viene definida como Base64, efectivamente:

<xs:element minOccurs="0" name="_foto" nillable="true" type="xs:base64Binary"/>

Por otro lado, estás asignando al Stream un array de bytes, y ese es el error que te devuelve Delphi:

[dcc32 Error] uMain.pas(73): E2010 Incompatible types: 'TStream' and 'System.TArray<System.Byte>'

Una posible solución es usar Indy para transformar el base 64 a Stream como se ve en este ejemplo; Ahí lo que hacen es cargar el base64 en un TStringStream y luego
cargarlo en la imagen de esta forma:

Código Delphi [-]
AStringStream := TStringStream.Create(DecodedBase64);
try
  AStringStream.Position := 0;
  imBase64.Picture.Bitmap.LoadFromStream(AStringStream);
finally
  AStringStream.Free;
end;
Espero que te sirva.

Un saludo
Responder Con Cita
  #4  
Antiguo 23-10-2020
darkamerico darkamerico is offline
Miembro
 
Registrado: dic 2010
Posts: 225
Poder: 14
darkamerico Va por buen camino
Red face gracias x responder

Cita:
Empezado por ElKurgan Ver Mensaje
Hola.

Creo que el problema te lo da la asignación de la foto.

En el Web Service viene definida como Base64, efectivamente:

<xs:element minOccurs="0" name="_foto" nillable="true" type="xs:base64Binary"/>

Por otro lado, estás asignando al Stream un array de bytes, y ese es el error que te devuelve Delphi:

[dcc32 Error] uMain.pas(73): E2010 Incompatible types: 'TStream' and 'System.TArray<System.Byte>'

Una posible solución es usar Indy para transformar el base 64 a Stream como se ve en este ejemplo; Ahí lo que hacen es cargar el base64 en un TStringStream y luego
cargarlo en la imagen de esta forma:

Código Delphi [-]AStringStream := TStringStream.Create(DecodedBase64); try AStringStream.Position := 0; imBase64.Picture.Bitmap.LoadFromStream(AStringStream); finally AStringStream.Free; end;

Espero que te sirva.

Un saludo



Amigo, Interesante sin duda el ejemplo que has citado, sin embargo ahi asumen que la imagen ya esta colocada en un componente TImage y realizan la conversion a base64 con una linea como esta:


Código Delphi [-]
imLoad.Picture.Graphic.SaveToStream(AImageStream);


En mi caso requiero tomar la cadena base64 del web service y cargarla a un Stream para luego cargarla en el componente TImage,
(el formato del base64 es Jpg por cierto) con una linea similar a esta:


Código Delphi [-]
Jpg.LoadFromStream([Stream]);


Hmmmm ando liado



Un abrazo
Responder Con Cita
  #5  
Antiguo 23-10-2020
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Hola, ya que especificas que el formato es JPEG. puedes cargar la foto a un TJPEGImage

Código Delphi [-]
uses
  .. JPEG;

procedure TForm1.VerFoto(Foto: TArray< System.Byte >; Image: TImage);
  var
    JPEGImage: TJPEGImage;
    AStringStream: TStringStream;
begin
  AStringStream := TStringStream.Create(StringOf(Foto));
  JPEGImage := TJPEGImage.Create;
  try
    AStringStream.Position := 0;
    JPEGImage.LoadFromStream(AStringStream);
    Image.Picture.Assign(JPEGImage);
  finally
    JPEGImage.Free;
    AStringStream.Free;
  end;
end;
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #6  
Antiguo 23-10-2020
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.232
Poder: 20
ElKurgan Va camino a la fama
Es que en el mismo ejemplo, un poco más abajo, viene como CARGAR la imagen, y no como GUARDARLA.

Lo hacen exactamente como te ha indicado movorack, es decir, creando un STRINGSTREAM a partir de la foto y luego cargando la imagen con LoadFromStream(elStringStream).

Piensa que el WebService te devuelve bytes que puedes cargar en un StringStream sin problemas. En el ejemplo serían las líneas:
Código Delphi [-]
DecodedBase64 := IdDecoderMIME1.DecodeString(ABase64);
AStringStream := TStringStream.Create(DecodedBase64);
try
  AStringStream.Position := 0;
  imBase64.Picture.Bitmap.LoadFromStream(AStringStream);
finally
  AStringStream.Free;
end;


Un saludo

Última edición por ElKurgan fecha: 23-10-2020 a las 17:43:49.
Responder Con Cita
  #7  
Antiguo 24-10-2020
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Hola ElKurgan, yo hice la prueba antes de publicar la respuesta.

Con el TIdDecoderMIME, genera error al intentar cargar la imagen. No reconoce el formato que devuelve DecodeString.
En el ejemplo que le coloco, estoy usando StringOf para obtener el texto que devuelven del servicio.
Y uso el TJPEGImage para cargar el Stream y por ultimo este sea asignado al TImage



Ahora... al rato revisé y eliminé la asignación al TJPEGImage y "funciona", siempre y cuando en los uses esté la unidad JPEG

Código Delphi [-]
uses
  .. JPEG;

procedure TForm1.VerFoto(Foto: TArray< System.Byte >; Image: TImage);
  var
    AStringStream: TStringStream;
begin
  AStringStream := TStringStream.Create(StringOf(Foto));
  try
    AStringStream.Position := 0;
    Image.Picture.loadFromStream(AStringStream);
  finally
    AStringStream.Free;
  end;
end;
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #8  
Antiguo 25-10-2020
darkamerico darkamerico is offline
Miembro
 
Registrado: dic 2010
Posts: 225
Poder: 14
darkamerico Va por buen camino
Thumbs up Gracias a todos

Cita:
Empezado por movorack Ver Mensaje
Hola ElKurgan, yo hice la prueba antes de publicar la respuesta.

Con el TIdDecoderMIME, genera error al intentar cargar la imagen. No reconoce el formato que devuelve DecodeString.
En el ejemplo que le coloco, estoy usando StringOf para obtener el texto que devuelven del servicio.
Y uso el TJPEGImage para cargar el Stream y por ultimo este sea asignado al TImage



Ahora... al rato revisé y eliminé la asignación al TJPEGImage y "funciona", siempre y cuando en los uses esté la unidad JPEG

Código Delphi [-]uses .. JPEG; procedure TForm1.VerFoto(Foto: TArray< System.Byte >; Image: TImage); var AStringStream: TStringStream; begin AStringStream := TStringStream.Create(StringOf(Foto)); try AStringStream.Position := 0; Image.Picture.loadFromStream(AStringStream); finally AStringStream.Free; end; end;

Quiero agradecer individualmente a todos los que aportaron para dar esta solución, un abrazo.


Atte,
Americo Torres
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
Cargar Imagen en TImage dmartinezn C++ Builder 5 09-02-2012 14:43:51
Cargar en timage una imagen existente pablopessoa Varios 3 19-11-2008 16:02:43
Cargar una imagen jpg en un TImage giropau C++ Builder 7 19-05-2007 08:11:07
Cargar imagen en un TImage luxus OOP 3 16-02-2007 18:06:23
Cargar una imagen desde la web a un TImage asegura Gráficos 3 20-10-2006 03:13:10


La franja horaria es GMT +2. Ahora son las 10:16:04.


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