Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-10-2013
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
TImage a TStream

Estimados,

necesito crear un TStream en memoria a contar de un componente TImage, que tiene una imagen previamente cargada.
Como hago esto?

Gracias
Responder Con Cita
  #2  
Antiguo 03-10-2013
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Si la imagen ya está cargada, debería bastar con esto:

Código Delphi [-]
var VStream: TStream;
begin
   VStream := TMemoryStream.Create;
   Image1.Picture.Bitmap.SaveToStream(VStream);
end;

Donde Image1 es el objeto TImage que ya tiene la imagen cargada.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #3  
Antiguo 04-10-2013
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
Estimado, estoy probando Delphi XE5, con una aplicación para Android y un servidor DataSnap.
Lo que necesito es insertar un registro en una base de Dato Firebird 2.5, en un campo tipo BLOB (size 16384, type Text), desde un cliente con el procedimiento insert_imagen (servidor DataSnap).
La imagen está previamente cargada y visualizada en un TImage, llamado imgCameraPicture.

Código Delphi [-]
procedure TServerMethods1.insert_imagen(imagen: TStream; usuario: integer);
begin
  with ibsql1 do
  begin
    transaction.Active := true;;
    close;
    sql.clear;
    sql.add('insert into imagenes (usuario, imagen, fecha)');
    sql.add('values (:usuario, :imagen, current_timestamp)');
    ParamByName('imagen').LoadFromStream(imagen);
    ParamByName('usuario').asinteger :=usuario;
    execquery;
    transaction.CommitRetaining;
  end;
end;

Y desde el cliente llamo al procedimiento como sigue.

Código Delphi [-]
var
  myServer : TServerMethods1Client;
  stream : TStream;
begin
if SQLConnection1.Connected then
begin
  myServer := TServerMethods1Client.Create(SQLConnection1.DBXConnection);
  stream := TMemoryStream.Create;

    try
    imgCameraPicture.MultiResBitmap[0].bitmap.savetostream(stream);
    myServer.insert_imagen(stream, 10);

  finally

    stream.Free;
    myServer.Free;
  end;
end;
end;

con todo esto logro insertar el registro en la base de dato, pero el campo imagen está en blanco. que podrá ser ??
Responder Con Cita
  #4  
Antiguo 04-10-2013
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Ignoro si esto:

Código Delphi [-]
imgCameraPicture.MultiResBitmap[0].bitmap.savetostream(stream);

... no sería más bien algo así:

Código Delphi [-]
imgCameraPicture.bitmap.savetostream(stream);

Pero, de todas formas, prueba esto otro:

Código Delphi [-]
imgCameraPicture.MultiResBitmap[0].bitmap.savetostream(stream);
stream.Position := 0;
myServer.insert_imagen(stream, 10);

A ver si hay suerte.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 04-10-2013
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
Estimado, no he podido lograr insertar una imagen.

Respecto a tu duda, el componente TImage en XE5, trae esas opciones de poder almacenar mas de una imagen.

Habrá algún problema con la definición de la tabla??
O el código del procedimiento en el servidor?

Alguna idea?
Responder Con Cita
  #6  
Antiguo 05-10-2013
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Comprueba que efectivamente "imgCameraPicture.MultiResBitmap[0]" contiene alguna imagen. No dudo de que sea así, pero, recuerdo haber utilizado el "imgCameraPicture" en Android y accedí la imagen mediante "imgCameraPicture.Bitmap" o algo así... según recuerdo. Lo dicho, prueba que realmente tengas ahí una imagen, prueba guardándola en un archivo o acaso con un simple "<> nil".
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #7  
Antiguo 07-10-2013
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
Estimado dec, revicé que realmente existiera la imagen, y así fue. Es más logré insertar la imagen, pero con el código del servidor DataSnap y un componente TIBSql en la aplicación cliente (ejecutada en win32), ya que en Android me arroja un error.

Todo apunta que tengo un problema en el servidor DataSnap, habrá que configurar alguna propiedad especial para poder transportar imagenes, en este caso TStream desde un cliente pasando un servidor DtaSnap que finalmente lo almacene en Firebird 2.5 ??

Este es el código del procedimiento que inserta el registro, cabe señalar que todos los otros campos lo inserta sin problema, el problema es que no inserta la imagen.

Código Delphi [-]
procedure TServerMethods1.insert_imagen(imagen: TStream; usuario: integer);
begin
  with ibsql1 do
  begin
    transaction.Active := true;;
    close;
    sql.clear;
    sql.add('insert into imagenes (usuario, imagen, fecha)');
    sql.add('values (:usuario, :imagen, current_timestamp)');
    ParamByName('imagen').LoadFromStream(imagen);
    ParamByName('usuario').asinteger :=usuario;
    execquery;
    transaction.CommitRetaining;
  end;
end;
Responder Con Cita
  #8  
Antiguo 12-12-2013
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
Estimados, he tenido que retomar este tema, pero sigo sin poder resolverlo.
Para evitar tener que trabajar con DataSnap (ya que aún no lo conozco por completo), he intentado enviar la imagen por medio de un servidor FTP, y ocurre que logro guardar la imagen en el servidor, pero esta tiene un tamaño de 0 byte.

Código Delphi [-]
procedure ...
var
   Stream: TMemoryStream ;
begin

  Stream:= TMemoryStream.Create;
  Stream.Position:= 0;
  image1.Bitmap.SaveToStream(Stream);

// me aseguro que el memorystream tengo alguna imagen, y efectivamente aparece la imagen en el segundo TImage
  image2.Bitmap.LoadFromStream(stream);

with idftp1 do
try
disconnect;
passive:=true;
Connect;

Put(Stream, 'MAS.JPG', FALSE);

finally
      STREAM.Free;
      idftp1.Disconnect;
 
end;

Esto no arroja ningún error, pero tampoco la imagen que deseo en el servidor.
Que podrá ser ???
Responder Con Cita
  #9  
Antiguo 03-09-2014
pape19 pape19 is offline
Miembro
 
Registrado: jul 2010
Posts: 96
Poder: 14
pape19 Va por buen camino
Hace un par de días que reniego con lo mismo, tu problema original.

En mi caso, mi app en Android(Cliente) toma una foto, y luego se guarda con un ClientDataSet. Esta imagen, la transformo en un stream. Luego en la bd del servidor, se hace la respectiva conversión para el campo blob.

Al igual que vos, no me guarda bien la imágen, y si los otros campos de la tabla. Pudiste resolverlo?

Gracias.
Responder Con Cita
Respuesta



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
la variable TStream shekinax_007 Internet 3 29-05-2013 04:11:52
Duda con TStream.Readbuffer miguel_e Varios 2 04-01-2006 19:31:10
Problemas al guardar componentes con TStream!! OzzyzzO OOP 11 20-10-2005 18:02:51
Cargar Tstream de donde? zugazua2001 Varios 1 30-07-2005 14:44:35
Modificar tStream aig OOP 14 27-06-2003 09:09:29


La franja horaria es GMT +2. Ahora son las 19:00: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