Programación General > C++ Builder

 Cargar una imagen JPG de una base de datos a un TImage

(1/2) > >>

Ana_22:
HOla Gente. Mi problema es que no puedo cargar una imagen JPG, que se encuentra en una base de datos(Firebird), en un componente TImagen.
Si la imagen es Bmp, lo puedo hacer con esta línea de código Image1->Picture->Assign(IBQuery1->FieldByName("FOTO")), sin problema. Pero si la imagen es JPG, me tira error. El campo FOTO es BLOB.

Si alguien me puede ayudar, se lo agradecería MUCHO.

TRod:
El tema fue comentado hace un tiempo:
http://www.solocodigo.com/foros/viewtop ... 16&t=32584

Puede funcionar con esto:

--- Código: Text ---  #include <jpeg.hpp> //Libreria para lo que ya imaginas... TJPEGImage *J = new TJPEGImage; J->LoadFromFile( <imagen IBQuery >  ); //¿? Image1->Picture->Assign(J);  
Revisa el link, de todas maneras.
¿Porqué no usas el componente 'TDBImage' y te quitas de problemas? o quiza no te estoy entendiendo bien :rolleyes:
Pero el caso es que <jpeg.hpp> puede resolver tu problema.
Suerte.

Ana_22:
Muchas Gracias por tu respuesta. No puedo usar un TDBImage porque sólo acepta imagenes bmp. Probé con el código que pusiste y con el código que había en el otro foro; pero creo q eso sirve para cuándo tenés la imagen en el disco, pero yo tengo la imagen en la base de datos.

TRod:
Lo siento. No era tan sencillo como pense. :brickwall:
Necesitas usar "streams".
En la parte de tu proyecto que creas que es pertinente, te puede ayudar este código:

--- Código: Text ---  //Crear un Stream: std::auto_ptr<TMemoryStream> stream (new TMemoryStream);  tablaCAMPO_IMAGEN->SaveToStream(stream.get());  //Copiarle la imagen que esta en el campo activo //tablaCAMPO_IMAGEN es un 'TField' o más bien un 'TBlobField' que se crea automáticamente cuando configuras el editor de campos (Field Editor)  //  Creas una variable de tipo "jpg" (en este ejemplo la llamamos 'jpeg') //  y posteriormente le asignas el "stream" stream->Position   =   0; std::auto_ptr<TJPEGImage>  jpeg(new   TJPEGImage); jpeg->LoadFromStream(stream.get());  //  'Image1' captura la imagen del 'jpeg' Image1->Picture->Bitmap->Assign( jpeg.get() );  Quizá se complique un poco si en la BD tienes revueltas imagenes BMP y JPG, pero creo que la sentencia 'try' lo puede solucionar.

Mi Fuente es:
http://topic.csdn.net/t/20030523/12/1823767.html

Y muchas gracias por aclararme algunas dudas que tenía con este tema :rolleyes: :beer:

Saludos y suerte con tu proyecto. :good:

Ana_22:
GRACIAS TROD! Probé el código y andubo! :D . Pero todavía tengo un problemita, yo uso un IBQuery  para consultar por los registros y un DBGrid para ver el resultado de la consulta, y la imagen no cambia aunque me vaya seleccionando otro registro de la consulta; siempre me muestra la primer imagen del primer registro de la consulta; a pesar de haber enlazado el Ttable con el IBQuery.
Será cuestión de seguir probando...

Saludos!

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa