Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   Insertar una imagen JPG en una tabla paradox (https://www.clubdelphi.com/foros/showthread.php?t=16315)

David 23-11-2004 20:13:57

Insertar una imagen JPG en una tabla paradox
 
Hola

Utilizo Delphi 6 y tengo una tabla paradox con un campo llamado imagen , que es un campo Grafico "G" , luego en la aplicación para abrir la imagen utilizo un TopenPicture , y para que abra una imagen jpg he puesto en el uses de arriba , jpeg.

Cuando inserto una imagen bmp no hay ningún problema ,pero cuando cargo la imagen jpg y le doy a validar , pues no se queda en la base de datos , no la admite.

Me gustaria saber la razón y también la solución.

Un saludo.

TDworD 24-11-2004 12:29:13

Si el problema es porque sea un JPEG, prueba a pasar la imagen por un objeto TBitmap antes de grabarlo en la base de datos, puede que si no no haga el cambio de formato y en la base de datos supongo que sólo se podrán almacenar Bitmaps.

Un saludo.

TDworD

roman 24-11-2004 17:04:05

Cita:

Empezado por David
Me gustaria saber la razón y también la solución.

La razón es que el tipo Graphic de Paradox no acepta este formato de imágenes. Eso no significa que no puedas guardar imágenes jpg en una tabla Paradox, sólo que no es tan inmediato.

Para empezar debes usar otro tipo de campo, por ejemplo Binary. Básicamente el tipo Binary te sirve para almacenar cualquier cosa, una imágen, una canción o cualquier archivo en un formato que Paradox no entienda.

Lo malo es que entonces no hay una forma directa de conectar este tipo de campos a un TDBImage (*) para mostrar y agregar imágenes.

En su lugar debes usar un TImage normal.

Por ejemplo, para agregar una imagen a la tabla puedes cargarla en un TImage con Image.Picture.LoadFromFile (deberás incluir la unidad jpeg) o directamente usando un objeto TJpegImage de la unidad jpeg en caso de que no requieras mostrar la imagen al usuario.

Después deberás usar el método SaveToStream de Image.Picture.Graphic o JpegImage para guardar el contenido a un Stream. Me parece que recomiendan un TBlobStream aunque puedes hacerlo con TStringStream.

Ya desde el Stream puedes copiar el contenido al campo:

Table1.FieldByName('foto').AsString := Stream.Datatring;

Y con esto ya tendrás guardada la imagen.

Para desplegarla tienes que seguir mas o menos los pasos inversos.

Asignas el contenido del campo a un TStringStream al momento de crear el stream:

Stream := TStringStream.Create(Table1.FieldByName('foto').AsString);

Y usas el método LoadFromStream de Image.Picture.Graphic o de JpegImage para cargar la foto.

Te estoy diciendo los pasos de memoria así que puedo estar equivocado en algo. Pero si buscas en los foros encontrarás más detalles. Me parece que hay un hilo del compañero Snake donde describe con precisón lo que hay que hacer. Yo nada más te estoy describiendo a grandes rasgos el proceso.

(*) Sí existen formas de usar un DBImage para mostrar imagenes jpg pero tienes que construir un derivado de TField que entienda este tipo de datos. Busca en el Code Central de Borland Developer Network las aportaciones de Robert Kuhlmann que versan sobre el tema. Él tiene un código para que puedas usar un DBImage con imágenes jpg.

// Saludos


La franja horaria es GMT +2. Ahora son las 15:24:46.

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