Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-05-2012
Beaker_ Beaker_ is offline
Miembro
NULL
 
Registrado: mar 2012
Posts: 13
Poder: 0
Beaker_ Va por buen camino
Recuperar/Mostrar Imagen de ClientDataSet

Hola, que tal, recurro a la ayuda de ustedes de nuevo ya que me encuentro ante un nuevo problema que no he podido resolver por más que he probado.
Estoy trabajando sobre un código que alguién más comenzó a hacer, por lo cual a veces me es díficil de entender jeje, pero esta es la cuestión.
El código lee y carga una serie de imágenes, las cuales las guarda en un componente ClienDataSet, de esta forma:

Declaración de tipos:
Código:
cImagen: TClientDataSet;
cImagenIdImagen: TIntegerField;
cImagenDescImagen: TStringField;
cImagenImagen: TBlobField;
Declaración para asignar imágenes al ClientDataSet
Código:
if openImage.Execute then begin
     cImagen.Append;
     cImagenIdImagen.Value := 1;
     cImagenDescImagen.Value := openImage.FileName;
     cImagenImagen.LoadFromFile(openImage.FileName);
     cImagen.Post;
  end;
Ahora tengo que leer el ClientDataSet y recuperar la imagen para desplegarla en un TImage, sin embargo, no encuentro como. Mi idea (seguramente tonta) era hacer lo siguiente (donde imagen es un componente TImage):

Código:
imagen.Picture := cImagenImagen;
Sin embargo, evidentemente me manda error de incompatibilidad de tipos, ya que imagen.Picture es TPicture y cImagenImagen es tipo TBlobField. De qué forma puedo recuperar la imagen del ClientDataSet y asignarla a un TImage?
También, y abusando de su tiempo y atención, me podrían explicar de que forma se relaciona el ClientDataSet cImagen con las variables cImagenIdImagen, cImagenDescImagen, cImagenImagen? Es decir, cómo si les asigno valores se añaden al ClientDataSet si no son componentes directos de este? (Es decir, no se asignan de esta forma, por ejemplo, cImagen.Imagen o cImagen.cImagenImagen)
Espero haberme explicado, y realmente agradezco su ayuda
Responder Con Cita
  #2  
Antiguo 17-05-2012
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.473
Poder: 21
newtron Va camino a la fama
Hola.

No sé si me he enterado bien de lo que comentas pero puedes probar con esto.

Código Delphi [-]
Imagen.picture.graphic.loadfromStream(cImagenImagen);

De la segunda parte si que no me he enterado pero básicamente la historia es que la imagen la guardas en modo stream en el campo blob y posteriormente para recuperarla y asignarla al componente image tienes que usar la instrucción que te comento anteriormente.

Saludos
__________________
Be water my friend.
Responder Con Cita
  #3  
Antiguo 17-05-2012
Beaker_ Beaker_ is offline
Miembro
NULL
 
Registrado: mar 2012
Posts: 13
Poder: 0
Beaker_ Va por buen camino
Que tal newtron, muchas gracias por tu ayuda, lamentablemente me manda error ya que LoadFromStream es de tipo TStream y cImagenImagen es de tipo TBlobField

[code]

[DCC Error] imagenes.pas(87): E2010 Incompatible types: 'TStream' and 'TBlobField'

[\CODE]

Que otra cosa pudiera yo hacer?
Responder Con Cita
  #4  
Antiguo 17-05-2012
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.473
Poder: 21
newtron Va camino a la fama
A ver....

prueba creando un stream a partir del campo TBlobField de esta manera:

Código Delphi [-]
Stream :=CImagen.CreateBlobStream(CImagen.FieldByName('cImagenImagen') as TBlobField, bmRead);
Imagen.picture.graphic.loadfromStream(Stream);

No estoy yo muy familiarizado con el ClientDataset por lo que igual me estoy equivocando sintácticamente, pero la idea es esa.

Recuerda declarar la variable Stream como TStream.

Saludos
__________________
Be water my friend.
Responder Con Cita
  #5  
Antiguo 17-05-2012
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Hola Beaker_,
revisa este hilo por si te sirve de ayuda.
http://www.clubdelphi.com/foros/show...highlight=blob

Saludos.
__________________
Confórmate con lo que tienes pero anhela lo que te falta.
Responder Con Cita
  #6  
Antiguo 17-05-2012
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
También he visto este

http://www.clubdelphi.com/foros/show...highlight=blob

Seguro que si buscas un poco más por los foros encontrarás más ejemplos porque estos los he encontrado en la primera página buscando blob.

Saludos.
__________________
Confórmate con lo que tienes pero anhela lo que te falta.
Responder Con Cita
  #7  
Antiguo 17-05-2012
Beaker_ Beaker_ is offline
Miembro
NULL
 
Registrado: mar 2012
Posts: 13
Poder: 0
Beaker_ Va por buen camino
newtron, te comento que lo que me aconsejaste ya lo había yo hecho pero de forma más directa (es decir, sin crear el TStream y ese código cargarlo directo a la imagen), sin embargo me da el siguiente error:

Cita:
Project imagenes.exe raised exception class $C0000005 with message 'access violation at 0x0092ecaf: read of address 0x00000000'.
ElDioni, gracias por el tiempo y la ayuda. Tienes razón, debí haber buscado primero pero no se me ocurrió como. El caso es que uno de los enlaces que me pasaste me sirvió, que fue la segunda respuesta tuya (no puedo poner enlaces :/)


Sin embargo, no me sirvió del todo, ya que si bien me carga bien la imagen, pero sólo si es JPG, y en mi sistema debe de cargar de distintos tipos de imagen (tif, gif, png, bmp, etc..., realmente son demasiados los tipos) y me manda error al cargar aquella que no es JPG.
Ahora sí he buscado algo, pero no he encontrado nada parecido a mi problema
Responder Con Cita
  #8  
Antiguo 17-05-2012
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Has probado con un obteto TImage de la siguiente forma.
Código Delphi [-]
Image1.Picture.Graphic.LoadFromStream();
No se si así te servirá, pero de todas formas ya te adelanto que seguramente con el gif no te valdrá porque hace falta componentes que delphi no lleva por defecto y que si no recuerdo mal son de pago.

Saludos.
__________________
Confórmate con lo que tienes pero anhela lo que te falta.
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
Guardar y recuperar imagen en bd Lizette Varios 17 26-11-2009 15:49:59
SQL Server - Grabar / Recuperar Imagen _Willa MS SQL Server 1 17-12-2008 13:37:30
Insertar y recuperar una imagen en un campo blob bluegene Lazarus, FreePascal, Kylix, etc. 1 30-03-2007 20:07:21
Recuperar IMAGEN de un QUERY natalinuyo Gráficos 31 12-02-2007 23:22:22
Cargar y recuperar imagen en bd MySQL??? burasu MySQL 2 22-08-2004 22:40:18


La franja horaria es GMT +2. Ahora son las 00:20: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
Copyright 1996-2007 Club Delphi