Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   lo más facil no me sale (https://www.clubdelphi.com/foros/showthread.php?t=37462)

Espartaco 14-11-2006 14:01:49

lo más facil no me sale
 
Hola amigos, creo que es una tonteria pero no lo consigo.
Tengo un DB en Paradox con un campo Graphic. Ahí almaceno gráficos en bmp. Lo prefiero así, porque me ocupan muy poco y son realmente pocos gráficos. Para grabarlos en la DB utilizo el TDBimage y el OpenPictureDialog y no tengo problemas.
El problema viene cuando quiero cargar la foto en un TImage desde la DB. He probado un monton de formas y siempre me dice 'tipos incompatibles', pues uso la propiedad graphic del Timage, por ejemplo, y me dice que no es compatible TGraphic con Variant. Pongo esto:

Image1.Picture.Graphic:=Table1['IMAGEN'];

Podríais ayudarme?

Muchas gracias.:o

oscarnoe 14-11-2006 14:09:56

Hola Espartaco,

prueba a cargarlo como un stream, si buscar Tblobstream en el foro seguro que encontraras algo que te ayude.

Espero que te sea de ayuda

Oscar Noe

Bicho 14-11-2006 22:02:26

Hola, por favor para otras veces, intenta poner títulos más descriptivos a los mensajes, eso ayudará un montón a la gente que tenga el mismo problema y pueda encontrar una solución aquí usando el buscardor
En definitiva échad un vistazo a la Guía de Estilo.

Un saludo

Espartaco 15-11-2006 09:03:55

Pedrón bicho, llevas razón, la próxima vez lo haré así.

Oscarnoe, después de leer todo el foro de gráficos, ya había visto un hilo que hablaba de algo muy similir usando TBlobStream, lo que pasa es que era con jpg y he intentado usarlo con bmp cambiando por un TBitmap pero cuando intenta cargar el campo gráfico en el Timage me dice que el bitmap no es válido y no sé por qué, porque si visualizo el campo con un TDBimage aparece éste perfectamente. La verdad estoy un poco desesperado.
De todas formas si puedes me pones un poco de código, es que soy un poco novato en esto.

Gracias por contestar tan rápido.:confused:

oscarnoe 15-11-2006 10:36:17

si es bitmap es timage.picture.bitmap, si no me equivoco.

Espartaco 15-11-2006 10:45:26

Eso es oscarnoe, pero resulta que tengo que cargar la imagen desde la base de datos de esta manera:

timage.picture.bitmap:=tabla1['imagen']

y al compilar me dice tipos imcompatibles Tbitmap y Variant.

Ahí es donde está el problema, sabrías como solucionarlo?

Muchas gracias de antemano.;)

oscarnoe 15-11-2006 11:03:53

pues deberias hacer lo mismo que con un jpeg, cargarlo con un stream

Espartaco 15-11-2006 11:21:47

Ya, he intentado lo que pone neftali en otro hilo de este foro como pone él en su mensaje:


Código Delphi [-] procedure TForm1.JpegBlobToImage();
var
Stream: Tblobstream;
img: Tjpegimage;
begin
// Cargar el campo Blob en un Stream
Stream := Tblobstream.Create(TBlobField(Table1.fieldbyname('Imagen')), bmRead);
// Crear la Imagen
img := Tjpegimage.Create();
// Cargar la imagen con el Stream
img.loadfromstream(Stream);
// Pasarla a un control IMage
image1.picture.assign(img);
// Liberar
img.free;
Stream.free;
end;






Para hacerlo con un TBitmat ha cambiado la linea


Código Delphi [-]img: Tjpegimage;




por


Código Delphi [-]img: TBitmap;



y la línea:


Código Delphi [-]img := Tjpegimage.Create();



por


Código Delphi [-]img := TBitmap.Create();




pero esto me da en tiempo de ejecución un error de 'Bitmap no válido', y el contenido del campo está bien y no está dañado.

Por qué ocurre esto?

Gracias otra vez por el interés oscarneo.

oscarnoe 15-11-2006 12:34:42

creo que las lineas que cargan la imagen en el control deberia ser algo como (de memoria sin confirmarlo)

Código Delphi [-]
image1.picture.bitmap:= TBitmap.Create;
image1.picture.bitmap.loadfromstream(stream);

espero qeue te sea de ayuda.

Oscar Noe

Espartaco 15-11-2006 14:26:47

he probado tu código y me sigue diciendo lo mismo:

'Bitmap image is not valid'

Estoy desesperao, porque tengo el programa estancado con esto ya que tengo que mostrar lo que hay en la base de datos y sólo lo puedo hacer con un TDBImage.

Reitero mis gracias por el interés

un saludo

espartaco

Espartaco 17-11-2006 09:12:09

soy yo otra vez, pongo el mensaje para que no se olvide.
Por favor, necesito ayuda con este tema, lo mas urgente posible.

Muchas gracias a todos por anticipado.:o

Lepe 17-11-2006 10:55:03

¿Por qué usar un TImage si puedes usar un TDBImage?

Saludos

Ivanzinho 17-11-2006 11:02:50

Cita:

Empezado por Lepe
¿Por qué usar un TImage si puedes usar un TDBImage?

Como dice Lepe por qué no usuas un TDBImage, yo lo utilizo para archivos bmp, pero como estos no tienen algunas opciones que tiene el TImage, como por ejemplo saber el tamaño de la foto para centrarla en pantalla, lo que hago es ocultar este componente y agregar un TImage y en el evento correspondiente hago lo siguente
Código Delphi [-]
Timage.Picture = TDBImage.Picture
y después trabajo con el TImage, esto con los archivos bmp, para los jpg utilizo un Stream

Espartaco 21-11-2006 11:48:17

Gracias a todos por vuestra ayuda, haré lo que dice ivanzinho, pero me viene mejor usar un TImage. Un poco frustrante no?:confused:

Pd: No he contestado antes porque el trabajo no me ha dado ni un respiro.
Gracias de nuevo, foros como este hacen que no te sientas solo cuando estás haciendo un programa.:D

k_rito 29-11-2006 22:32:15

Ya funcionó?
 
Probe lo que alguien propuso anteriormete y funca, es solo utilizar un TDBimage enlasado a la tabla de la que quieres extraer el picture en BMP, y luego lo muestras en tu Timage con esa instruccion:

logo.Picture:=logoDB.Picture; (Logo= de tipo Timage y LogoDB= de tipo TDBImage)


La franja horaria es GMT +2. Ahora son las 15:22:23.

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