Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Cargar un imagen a un Timage desde ORACLE (https://www.clubdelphi.com/foros/showthread.php?t=23036)

kavisch 05-07-2005 01:00:06

Cargar un imagen a un Timage desde ORACLE
 
Hola a Todos,

:)
Bueno mi problema es que tengo una tabla con un campo tipo long en el cual guardo imganes.. se como guardar las imagenes, utilizo lo siguiente:

tabla1.insert;
tabla1.FieldByName('Imagen').LoadFromFile('c:\ruta\imag.jpg',ftmemo);
tabla1.post;

:confused: lo que no se es como cargar las imagnes de mi tabla a un componente Timage. :confused:

porfavor ayuda..

yusnerqui 05-07-2005 14:02:53

Hola
 
Ya probastes asociarle un componente TDBImage al campo Imagen de la tabla?


Saludos

kavisch 05-07-2005 20:37:08

Cita:

Empezado por yusnerqui
Ya probastes asociarle un componente TDBImage al campo Imagen de la tabla?


Saludos

hola,

si, yo probe con un DBImage y me da un error que dice. EReadError with :confused: message 'Stream read error'.
por otro lado yo estuve utilizando el sienguente codigo:

var
bimp : TBitmap;
ms : TMemoryStream;
Begin

Image1.Visible := True;
bimp := TBitmapCreate;
ms := TMemoryStream.Create;
EmployFOTOGRAFIA.SaveToStream(ms);
bimp.LoadFromStream(ms);
Image1.Picture.Assign(bimp);
ms.Free;
bimp.Free;
end;

con esto simplemente no me muestra nada, no me da error pero no me muestra la imgagen.:confused:

yusnerqui 05-07-2005 22:38:53

Hola de nuevo
 
Creo que se te escapó un detalle, las imágenes que estás cargando son JPG y no las puedes asignar así directamente, tienes que primero hacer la conversión.

lo primero es agregar en el Uses la unidad "jpeg".

Después algo como esto:

Código Delphi [-]
  Var
    bimp : TJpegImage;
    ms : TMemoryStream;
   begin
     Image1.Visible := True;
     bimp := TJpegImage.create;
     ms := TMemoryStream.Create;
     EmployFOTOGRAFIA.SaveToStream(ms);
     bimp.LoadFromStream(ms);
     Image1.Picture.Assign(bimp);   
     ms.Free;
     bimp.Free;
   end

Bueno esto lo he hecho de memoria y mirando tu código, pero de seguro te ayudará a terminar de solucionar el problema.

Saludos;)

kavisch 06-07-2005 14:40:05

Hola
 
primero quiero darte las gracias por el tiempo que has
dedicado para ayudarme..:)

intente llamarla como un JPG y me dio error : JPEG Error #42..

pero hay algo, la imagen que guardo en la base de dato Oracle es Bitmap
y por eso es que trato de capturarla asi...:confused:

Gracias..:)

yusnerqui 06-07-2005 16:03:43

mmmmm
 
Cita:

Empezado por kavisch
tabla1.FieldByName('Imagen').LoadFromFile('c:\ruta\imag.jpg',ftmemo);

Cita:

Empezado por kavisch
pero hay algo, la imagen que guardo en la base de dato Oracle es Bitmap

Estás seguro?.:confused: :confused:

Por otra parte buscando en los foro he encontrado varios hilos sin respuestas con tu mismo problema:
Hilo1
Hilo2
Hilo3

He notado que para guardar la imágen no lo hacen directamente como propones, sino que usan el objeto TStream.

Saludos.

kavisch 06-07-2005 17:24:05

hola otra vez
 
Bueno yo te dije que es de tipo Bitmap porque yo capturo esa imagen
de una camara y la guardo como bitmap el el server y luego la gurado a la base de datos asi mismo.:confused: , pero ahora no se si es bitmap,

ya que me puse a verificar el hilo3 y intente capturar la imagen como el explica en el hilo, cuando lo ejecute no reconoce ninguno de los formatos, me explico , no es ni BMP , JPG O GIF, Si te das cuanta el lee el campo y pregunta de que tipo es para crear la imagen , en mi caso no entra en ninguno de estos bloques...:confused:

Gracias...

SnaKe 07-07-2005 09:23:01

Hola,


En este hilo encontrarás información para almacenar la imagen en la base de datos y luego recuperarla en un control TImage:

http://www.clubdelphi.com/foros/showthread.php?t=2450

Las pruebas las hice con bases de datos Paradox e Interbase pero debería valer para todos los tipos de base de datos.

Espero que te sirva.
Un saludo.

SnaKe 08-07-2005 08:18:08

Hola,

A ver, ya he conseguido almacenar imágenes BMP en una base de datos Oracle y luego mostrarlas en un TImage.

Lo primero, el campo de la tabla de la base de datos no debe ser LONG sino que debe ser LONG RAW

Bien, el código para incorporar la imagen sería algo así e iria colocado en el click de un botón que he puesto para añadir la imagen:

Código Delphi [-]
if (OpenDialog1.Execute) then begin
  if (Table1.State <> dsBrowse) then
    Table1.Insert;
  Table1FOTO.LoadFromFile (OpenDialog1.FileName);
  Table1.Post;
end;
OpenDialog1 es un control dialogo de apertura de ficheros.
Table1 es un TTable conectado a la tabla.
Table1FOTO es el campo persistente asociado al campo de tipo LONG RAW

Y luego, para mostrarla en el evento OnAfterScroll del TTable (Table1) he puesto este codigo:
Código Delphi [-]
var
  B : TBitmap;
begin
  B := TBitmap.Create;
  B.Assign (Table1FOTO);
  Image1.Picture.Assign(B);
  B.Free;
end;
Image1 ya sabes lo que es ¿no?.

Esta última parte es posible que funcione simplemente así (ojo, esto no lo he probado):
Código Delphi [-]
begin
  Image1.Picture.Assign(Table1FOTO);
end;

Este codigo combinado con unos buenos try/except y algun control mas por si hubiese error... (paporsiacaso como dicen en mi pueblo) debería funcionarte correctamente.

Espero que te sirva.

Un saludo.

kavisch 08-07-2005 14:57:40

Funciono Perfectamente
 
:)
Hola,

:) Quiero darte las gracias, lo que me enviaste funciona perfectamente
guarda la imagen y luego la puedo mostrar en el TImage. Pero quiero preguntarte porque es que no se puede usar LONG, ya que aqui todas las tablas tiene los campos imagenes de tipo long y no Long raw.

Muchas gracias,:) :)

SnaKe 11-07-2005 09:15:40

Hola,

Pues la verdad es que no lo se, si dices que en campos de tipo LONG teneis guardadas imágenes no se... yo no puedo... tampoco he trasteado demasiado con Oracle, solo lo suficiente...

Cuando creo el campo persistente sobre un campo de tipo LONG de Oracle la variable es del tipo: TMemoField para Delphi, con esto si le intentamos dar datos binarios (imagenes, sonidos, etc...) se almacena como texto con lo cual se pierde información.

En cambio si el tipo es LONG RAW el campo persistente se genera del tipo TBlobField para Delphi, entonces al darle información a esa varible ya lo hace correctamente.

Yo creo que es un poco como los campos de tipo MEMO y GRAPHIC de Paradox, en uno se almacenan Textos y en otros datos binarios, al menos el tratamiento que Delphi hace de ellos es ese.

Un saludo.

kavisch 14-07-2005 15:50:39

Hola Snake
 
Hola,

Snake tengo un gran problema y te voy a explicar, aqui hay una aplicación finaciera la cual maneja todo lo que es contabillidad, esta aplicacion tiene su base de datos en Oracle y los Campos de Foto son de tipo LONG. lo que sucede es que la aplicacion que estoy creando va a complementar funciones de uno de sus modulos que es el de los empleados, mi aplicación capturara la foto y la guardara en la base de datos y luego la mostrara cuando se busque un empleado.

el caso es que como ya hemos hablado yo puedo guardar la imagen en el campo LONG y la aplicacion fInaciera Muestra la imagen, pero con mi aplicacion no puedo mostrarla.:confused:

ya se que me dijiste que deberia Usar Campos de TIpo LONG ROW y yo hice unas pruebas con tablas que yo cree y funciono perfectamente, pero no puedo cambiar la estructura de estas tablas ne moe lo permiten, el caso es que Quiero saber si puedo desplegar esa imagen en un Timage en delphi con los campos de tipo LONG y muestrame si te es posible un Ejemplo....:confused:

Muchas Gracias,:)


La franja horaria es GMT +2. Ahora son las 02:28:29.

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